C語言探索之旅 | 第一部分第三課:你的第一個程序

作者 謝恩銘县习,公眾號「程序員聯(lián)盟」(微信號:coderhub)墙杯。
轉(zhuǎn)載請注明出處匣吊。
原文:http://www.reibang.com/p/c73fecacd006

《C語言探索之旅》全系列

內(nèi)容簡介


  1. 前言
  2. 控制臺程序還是窗口程序
  3. 最基礎(chǔ)的代碼
  4. 特殊字符
  5. 注釋匈睁,很有用
  6. 總結(jié)
  7. 第一部分第四課預(yù)告

1. 前言


在上一課 C語言探索之旅 | 第一部分第二課:工欲善其事桶蛔,必先利其器 中我們說過,你可以用自己喜歡的 IDE瑟慈,或者用文本編輯器桃移、編譯器和調(diào)試器這樣的組合來學(xué)習(xí)本課程。

不過葛碧,我覺得對于初學(xué)者借杰,還是有必要演示一下某款 IDE 的具體下載和安裝等操作。我就以 Code::Blocks 這款免費開源且跨平臺的 IDE 為例吧进泼。

下載 Code::Blocks


先去 Code::Blocks 的官方下載頁面:http://www.codeblocks.org/downloads/binaries 蔗衡。

2020 年 3 月 29 日 Code::Blocks 終于更新了 20.03 版(不容易啊,上一次的版本還是 2017 年的)乳绕,不過可惜的是 macOS 的版本還是停留在 13.12(網(wǎng)站上標(biāo)識的是 13.12绞惦,但實際安裝之后是 17.12 版)。

  • Windows 用戶請下載 .exe 的文件洋措,一般來說是下載 codeblocks-20.03mingw-setup.exe 這樣的最新的 .exe 的安裝文件济蝉。記得要有 mingw 字樣的,才包含 GCC 編譯器和 GDB 調(diào)試器。

  • Linux 用戶請下載對應(yīng)你的操作系統(tǒng)的版本王滤。目前有 Debian贺嫂、Ubuntu 和 RedHat 系。Ubuntu 可以用 apt 命令來安裝雁乡,請看官方文檔第喳。

  • 蘋果 macOS 用戶請下載最新版的 dmg 文件,例如 CodeBlocks-13.12-mac.zip踱稍。不過這個版本有點舊了墩弯,可能會有 bug。

安裝運行 Code::Blocks


Code::Blocks 的安裝很簡單寞射,和安裝 QQ 這樣的普通軟件沒多大區(qū)別,一路默認(rèn)到底就好锌钮。

安裝完之后雙擊運行桥温,你可以看到類似下圖的界面:

上圖中標(biāo)注了四個區(qū)域:

  1. 工具欄:有很多按鈕,但只有幾個是我們時常用到的梁丘。
  2. 項目文件列表區(qū):左邊的欄里面顯示了你的項目的所有文件侵浸。
  3. 主界面:寫代碼的地方。
  4. 通知欄:會看到運行的錯誤氛谜,編譯的問題掏觉,等等。

那么值漫,如何創(chuàng)建一個 C語言基本的控制臺應(yīng)用程序呢澳腹?

首先到菜單里,依次點擊“File -> New -> Project”杨何,

會打開類似如下的窗口:

創(chuàng)建新項目

可以看到酱塔,Code::Blocks 支持非常多的程序類型,這些程序類型用到不同的庫危虱,比如 SDL(開發(fā) 2D 程序)羊娃,OpenGL(開發(fā) 3D 程序),Qt 和 wxWidgets埃跷,等等蕊玷。甚至還支持 Arduino、ARM 這樣的嵌入式項目弥雹。

目前垃帅,這些圖標(biāo)很多都只是好看而已,因為你還沒安裝對應(yīng)的庫剪勿,所有不能用瓜富。

暫時我們只用最基本的 Console application(表示“控制臺應(yīng)用”捅暴,簡單來說就是會彈出一個框座云,里面顯示程序運行的結(jié)果帝璧,你也可以輸入東西)。

選擇 Console application锹淌,點擊 Go 按鈕到下一步:

這一步是讓你選擇要使用的編程語言,有 C 和 C++ 兩個選項,我們選擇 C订讼,表示要創(chuàng)建的是 C語言的項目。然后點擊 Next 進入下一步:

項目配置

Project Title 里面填寫你要創(chuàng)建的項目名稱扇苞,我們填的是著名的 HelloWorld欺殿。Folder to create project in 是選擇項目存放的路徑。

Project filename 是指項目文件名稱鳖敷,可以看到是 .cbp 結(jié)尾的文件類型脖苏,cbp 是 Code Blocks Project 的首字母縮寫,表示“Code::Blocks項目”定踱。

點擊 Next 到下一步:

進一步配置

這里我們不必更改什么棍潘,默認(rèn)就好。點擊 Finish(“完成”)結(jié)束配置崖媚,Code::Blocks 就會創(chuàng)建你的第一個項目了亦歉。

打開 Sources 里的 main.c 這個 C語言的源代碼文件。點擊上面工具欄里有一個綠色的三角形按鈕畅哑,是用于運行程序肴楷,它會提示你是否要編譯,點擊 yes(當(dāng)然了荠呐,你也可以點擊綠色三角形邊上的帶齒輪的綠色三角形按鈕赛蔫,是用于“編譯再運行”),運行起來后我們的第一個控制臺程序輸出:

Hello world!
運行結(jié)果

2. 控制臺程序還是窗口程序


現(xiàn)在泥张,既然我們已經(jīng)把舞臺都搭好了濒募,該是時候把我們的主角 C語言請出來了。我們將一起來寫第一個 C語言程序圾结。

當(dāng)然了瑰剃, 這個程序會是黑白的,也不會跟你打招呼筝野,更不會幫你泡咖啡晌姚。可能顯得毫無用處歇竟,但卻是你的第一個程序挥唠,我保證你會有成就感的。

我們在 Code::Blocks 這個 IDE 中看到焕议,當(dāng)你要創(chuàng)建一個項目時宝磨,IDE 會問你是創(chuàng)建 console(控制臺)程序還是 window(窗口)程序。

之前我們?yōu)榱丝焖傺菔荆x擇的是控制臺程序唤锉。

其實只有這兩種類型世囊,沒有其他的了:

  • 窗口程序
  • 控制臺程序

先來介紹一下窗口程序,因為比較直觀窿祥,比較漂亮株憾,顏值爆表。

這樣的程序你肯定見到過晒衩,下圖對大多數(shù)人來說很熟悉吧嗤瞎。

Windows 系統(tǒng)的畫圖程序

是的,上圖就是 Windows 系統(tǒng)的畫圖程序听系。它是一個窗口程序贝奇,就是有窗口的程序(有時候不止一個窗口)。我想你肯定想學(xué)習(xí)創(chuàng)建這樣的程序靠胜,但是如果你是第一次接觸編程掉瞳,那有點難。

一開始還是最好從 console(控制臺)程序入門髓帽。

那么,所謂的控制臺程序長什么樣呢脑豹?

最初的程序都是控制臺程序郑藏,因為那個年代電腦還只能顯示黑白色,而且也沒有強大到可以運行窗口程序瘩欺,不像今天的電腦必盖。

當(dāng)然了,時代在進步俱饿。Microsoft(微軟)公司的 Windows 系統(tǒng)使得電腦能被廣大群眾使用歌粥,就是因為它操作很簡單,幾乎所有操作都可以用窗口程序完成拍埠。

Windows 實在是太流行了失驶,以至于大多數(shù)人都不知道 console(控制臺)程序長什么樣。不過枣购,我有一個好消息:“控制臺程序并沒有死嬉探!”

實際上,Linux 操作系統(tǒng)給很多的人展示了控制臺程序的魅力棉圈,下圖就是 Linux 下的控制臺程序的截圖:

Linux 的 Terminal 終端

看上去還不錯涩堤,是嗎?好了分瘾,現(xiàn)在你已經(jīng)對控制臺程序有了初步概念了胎围。

有一些注意點:

  1. 今天電腦已經(jīng)可以顯示彩色了,所以上面看到的控制臺也不是完全黑白的了。
  2. 對于初學(xué)編程的人來說白魂,控制臺還是令人不太適應(yīng)的汽纤。
  3. 如果我們掌握了這個工具,可以用它來做很多事情碧聪。

就如我們上面提到的冒版,創(chuàng)建像上圖中的控制臺程序,其實很簡單逞姿,而且非常適合初學(xué)者〈俏耍現(xiàn)在的控制臺程序不僅可以顯示彩色,而且如果你要給它設(shè)置一個背景圖片滞造,也是可以辦到的续室。

說了這些,那是不是只有 Linux 才有控制臺程序谒养,Windows 就沒有呢挺狰?

當(dāng)然也有,在 Windows 中它被稱為 cmd买窟,也就是 command(表示“命令”)的縮寫丰泊,也稱為“命令提示符”,是 Windows 環(huán)境下的虛擬 DOS 窗口始绍。只不過它比較隱秘瞳购。可以用以下兩種把它請出來:

  1. 點擊“開始 -> 搜索 -> 輸入“cmd”亏推,然后按回車鍵学赛,或點擊“確定”。
  2. 用組合鍵 win+R 調(diào)出 (win 鍵就是鍵盤最下面從左邊數(shù)第二個鍵吞杭,上面有個 Windows 系統(tǒng)標(biāo)志的)盏浇,再輸入 cmd,然后按回車鍵芽狗,或點擊“確定”绢掰。
cmd 程序,也就是“命令提示符”

上圖就是 Windows 里面奇妙的控制臺童擎。

當(dāng)然了曼月,蘋果的 macOS 操作系統(tǒng)中,我們也可以打開控制臺的柔昼,只要運行 Terminal 這個系統(tǒng)自帶的應(yīng)用程序:

3. 最基礎(chǔ)的代碼


對于 C語言的每一個程序哑芹,我們都要輸入最基礎(chǔ)的幾行代碼。這幾行代碼不是太特別捕透,但是必不可少聪姿。

我們現(xiàn)在就來看看“最基礎(chǔ)的代碼”長什么樣碴萧。

讓 IDE 為我們生成“最基礎(chǔ)的代碼”


之前我們已經(jīng)演示了,Code::Blocks 會為我們生成 C語言程序的最基礎(chǔ)代碼末购,如下:

#include <stdio.h>
#include <stdlib.h>

int main()
{
    printf("Hello world!\n");
    return 0;
}
最基礎(chǔ)的代碼

其中

int main()

這一行也可以寫成

int main(int argc, char *argv[])

兩種寫法都是可以的破喻,不過第二種(復(fù)雜一些的)更常用,也更專業(yè)盟榴。以后的課程我們會用 int main(int argc, char *argv[]) 這種形式曹质。

分析最基礎(chǔ)的代碼


對于第一次接觸編程的朋友,可能這個最基礎(chǔ)的代碼也是令人難以理解擎场。

所以我們才要一起來學(xué)習(xí)如何閱讀代碼羽德。

先從前兩行開始吧:

#include <stdio.h>
#include <stdlib.h>

這兩行很特別,我們會在源代碼開頭的地方見到這樣的以 # 號開頭的語句迅办。像這樣特別的行宅静,稱為預(yù)編譯指令

這個術(shù)語聽起來有點復(fù)雜站欺。預(yù)編譯指令會在編譯開始的時候姨夹,被一種叫做預(yù)編譯器的程序所讀取。

其實編譯器為我們做很多事情矾策,我們之后的課程會詳細(xì)來說明磷账。

但是這兩行到底是什么意思呢?

這里的 # 號是預(yù)編譯指令開始的標(biāo)志贾虽,沒有什么特別的含義逃糟,后面接著的 include 表示“包含”,所以這兩句話的意思就是在我們的程序里包含 stdio.h 和 stdlib.h 這兩個文件榄鉴,這兩個文件在系統(tǒng)的庫里已經(jīng)存在了履磨,這些文件被稱為庫文件蛉抓。

如果沒有這兩句話庆尘,那我們就不能在程序里調(diào)用這兩個文件定義的東西了。

接著巷送,我們看到了下面的語句:

int main()
{
    printf("Hello world!\n");
    return 0;
}

以上我們所看到的語句塊驶忌,被稱為函數(shù)。其實 C語言的程序基本就是由函數(shù)來構(gòu)成的笑跛。所以目前我們的程序只有一個函數(shù)付魔。

我們現(xiàn)在還不會講很多函數(shù)的細(xì)節(jié),因為那將是后面的函數(shù)那一課的內(nèi)容飞蹂,現(xiàn)在還早几苍。但是我們會大體說一下函數(shù)的組成。

第一行包含了函數(shù)的名字陈哑,是第二個單詞 main妻坝。所以這里的函數(shù)稱為 main 函數(shù)伸眶。這是一個特殊的函數(shù),程序執(zhí)行總是從 main 函數(shù)開始刽宪。

一個函數(shù)有開始和結(jié)束厘贼,使用大括號 {} 來標(biāo)識。所以我們的 main 函數(shù)包含以下兩行代碼

printf("Hello world!\n");
return 0;

這些在函數(shù)里的行也有名字圣拄,被稱為指令嘴秸。每一條指令都會讓電腦做特定的事情。一個函數(shù)大體來說是用來集中一定數(shù)目的指令庇谆。比如我們可以創(chuàng)建一個函數(shù)叫做“打開文件”岳掐,這個函數(shù)會讓電腦為你打開某個文件。

函數(shù)的優(yōu)勢就是當(dāng)你寫好了這個函數(shù)之后族铆,你只需要使用(專業(yè)術(shù)語叫做調(diào)用)“打開文件”這個函數(shù)岩四,電腦就會為你執(zhí)行函數(shù)里面的指令。你不必每次在需要實現(xiàn)“打開文件”功能的地方都重復(fù)寫那些指令哥攘。函數(shù)可以大大節(jié)約代碼空間剖煌,提高效率。

printf("Hello world!\n"); 

這一行指令使得屏幕顯示 "Hello World!"(表示“你好逝淹,世界耕姊!”)這一句話。當(dāng)你的程序執(zhí)行到這一行時栅葡,就在屏幕上顯示相應(yīng)的信息茉兰。然后會執(zhí)行下一個指令。

printf 也是一個函數(shù)欣簇,定義在 stdio 庫中规脸,現(xiàn)在你知道

#include <stdio.h>

這句話的重要性了吧,如果沒有引入 stdio 這個庫熊咽,那我們的 main 函數(shù)就不能調(diào)用 printf 這個函數(shù)莫鸭。

第二個指令 return 0; 大致就是表示函數(shù)結(jié)束了,并且返回 0 值横殴。

那么被因,為什么我的函數(shù)返回 0,不是返回其他值呢衫仑?

實際上梨与,每個 C語言程序結(jié)束時都會返回一個值,0 表示一切正常結(jié)束文狱,其他的值表示異常粥鞋。

這里我們只是簡單介紹了一下函數(shù)的概念。關(guān)于函數(shù)的細(xì)節(jié)瞄崇,請期待之后的課程呻粹。

測試你的程序


在 Code::Blocks 里面編譯(Build / Compile)并運行(Run) 你的最基礎(chǔ)代碼到踏。得到如下結(jié)果

運行結(jié)果

可以看到你的第一個程序在屏幕上顯示了 "Hello world!"。

下面的那幾行文字是 Code::Blocks 生成的尚猿,表示程序順利執(zhí)行窝稿,并且耗時 0.297 秒。

"Press any key to continue"這句話是讓你按鍵盤上的任意鍵來退出控制臺程序凿掂。

4. 特殊字符


特殊字符的作用是用來表示“換行”伴榔,“隔開一個制表符的空間”,等等庄萎。

特殊字符很好辨認(rèn)踪少,經(jīng)常是兩個字符的組合,第一個字符是反斜杠(\)糠涛,第二個字符是一個數(shù)字或者一個字母援奢。

下面的兩個特殊字符是我們經(jīng)常會用到的:

  • \n :換行符 (作用類似按回車鍵)。
  • \t :制表符 (作用是空出幾個空格忍捡〖空格的數(shù)目可以配置)。

5. 注釋砸脊,很有用


在結(jié)束這一課前具篇,我們必須再來講一下注釋。不論什么編程語言凌埂,我們都可以在源代碼里添加注釋驱显。C語言當(dāng)然也不例外。

注釋瞳抓,到底是什么鞍R摺?

簡單地說孩哑,注釋就是在你程序之中用來標(biāo)注這個程序的作用栓霜,某一行代碼的作用,等等的文字臭笆。注釋真的很重要叙淌,因為即使是一個計算機天才秤掌,也要在某些地方做一些注解愁铺。注釋有如下作用:

在之后閱讀自己寫的代碼時不至于迷失方向。不可否認(rèn)闻鉴,在重新閱讀之前寫的代碼時茵乱,我們常常會忘記這個函數(shù)是干什么的,那個地方為什么要這樣寫孟岛。特別是代碼量很大瓶竭,幾千幾萬行甚至更多時督勺,如果沒有注釋,那閱讀起來會很費力斤贰。

如果你把你的代碼給別人閱讀智哀,注釋往往可以節(jié)省對方理解你的代碼的時間。

要在 C語言的代碼中插入注釋荧恍,有幾種形式:

  • 如果你的注釋比較短瓷叫,在一行里就能寫完,那可以用 //... 這樣的形式送巡。
  • 如果你的注釋跨越好幾行摹菠,那可以用 /* ... */ 的形式。

雖然程序行數(shù)變多了骗爆,但是注釋卻使我們的代碼變得易讀很多次氨。編譯代碼的時候,編譯器會忽略所有的注釋摘投,這些注釋不會出現(xiàn)在最終的程序里煮寡,只是為程序員服務(wù)的。

記住
注釋要起到引導(dǎo)閱讀代碼的作用犀呼,以便理清頭緒洲押。但是不要在很顯然就能懂的地方添加注釋。

引用 IBM 公司的一句格言:
“如果一個程序圆凰,在你僅僅看完它的注釋之后杈帐,你不能了解它的作用,那么把這個程序扔了吧专钉√敉”
-- 大公司就是這么嚴(yán)格,這么任性跃须。

6. 總結(jié)


  1. 程序可以通過一個控制臺(Console)或者窗口(Window)和用戶交互站叼。
  2. 對初學(xué)者來說用控制臺來編寫第一個程序要簡單很多,雖然不太吸引人菇民。
  3. C語言的程序主要是由分號結(jié)尾的語句構(gòu)成的尽楔。
  4. 多條指令可以寫在一個函數(shù)里,就好像包裝在一個盒子里一樣第练。
  5. main 函數(shù)是程序的啟動函數(shù)阔馋,程序運行時會執(zhí)行 main 函數(shù)里的指令。
  6. printf 函數(shù)使我們可以在控制臺的屏幕上顯示信息娇掏。
  7. printf 函數(shù)是定義在一個庫(Library)中的呕寝。庫中經(jīng)常包含不止一個函數(shù),可以給我們程序調(diào)用婴梧。

7. 第一部分第四課預(yù)告


今天的課就到這里下梢,一起加油吧客蹋!

下一課:C語言探索之旅 | 第一部分第四課:變量的世界(一),內(nèi)存那檔事

下一課開始孽江,我們一起探尋 C語言的變量的奇幻世界讶坯,還會聊到內(nèi)存哦,有些難度岗屏。


我是 謝恩銘闽巩,公眾號「程序員聯(lián)盟」(微信號:coderhub)運營者,慕課網(wǎng)精英講師 Oscar 老師担汤,終生學(xué)習(xí)者涎跨。
熱愛生活,喜歡游泳崭歧,略懂烹飪隅很。
人生格言:「向著標(biāo)桿直跑」

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市率碾,隨后出現(xiàn)的幾起案子叔营,更是在濱河造成了極大的恐慌,老刑警劉巖所宰,帶你破解...
    沈念sama閱讀 217,734評論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件绒尊,死亡現(xiàn)場離奇詭異,居然都是意外死亡仔粥,警方通過查閱死者的電腦和手機婴谱,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,931評論 3 394
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來躯泰,“玉大人谭羔,你說我怎么就攤上這事÷笙颍” “怎么了瘟裸?”我有些...
    開封第一講書人閱讀 164,133評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長诵竭。 經(jīng)常有香客問我话告,道長,這世上最難降的妖魔是什么卵慰? 我笑而不...
    開封第一講書人閱讀 58,532評論 1 293
  • 正文 為了忘掉前任沙郭,我火速辦了婚禮,結(jié)果婚禮上呵燕,老公的妹妹穿的比我還像新娘棠绘。我一直安慰自己件相,他們只是感情好再扭,可當(dāng)我...
    茶點故事閱讀 67,585評論 6 392
  • 文/花漫 我一把揭開白布氧苍。 她就那樣靜靜地躺著,像睡著了一般泛范。 火紅的嫁衣襯著肌膚如雪让虐。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,462評論 1 302
  • 那天罢荡,我揣著相機與錄音赡突,去河邊找鬼。 笑死区赵,一個胖子當(dāng)著我的面吹牛惭缰,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播笼才,決...
    沈念sama閱讀 40,262評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼漱受,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了骡送?” 一聲冷哼從身側(cè)響起昂羡,我...
    開封第一講書人閱讀 39,153評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎摔踱,沒想到半個月后虐先,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,587評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡派敷,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,792評論 3 336
  • 正文 我和宋清朗相戀三年蛹批,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片篮愉。...
    茶點故事閱讀 39,919評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡般眉,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出潜支,到底是詐尸還是另有隱情甸赃,我是刑警寧澤,帶...
    沈念sama閱讀 35,635評論 5 345
  • 正文 年R本政府宣布冗酿,位于F島的核電站埠对,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏裁替。R本人自食惡果不足惜项玛,卻給世界環(huán)境...
    茶點故事閱讀 41,237評論 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望弱判。 院中可真熱鬧襟沮,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,855評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至固灵,卻和暖如春捅伤,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背巫玻。 一陣腳步聲響...
    開封第一講書人閱讀 32,983評論 1 269
  • 我被黑心中介騙來泰國打工丛忆, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人仍秤。 一個月前我還...
    沈念sama閱讀 48,048評論 3 370
  • 正文 我出身青樓熄诡,卻偏偏與公主長得像,于是被迫代替她去往敵國和親诗力。 傳聞我的和親對象是個殘疾皇子粮彤,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,864評論 2 354

推薦閱讀更多精彩內(nèi)容