作者 謝恩銘县习,公眾號「程序員聯(lián)盟」(微信號:coderhub)墙杯。
轉(zhuǎn)載請注明出處匣吊。
原文:http://www.reibang.com/p/c73fecacd006
《C語言探索之旅》全系列
內(nèi)容簡介
- 前言
- 控制臺程序還是窗口程序
- 最基礎(chǔ)的代碼
- 特殊字符
- 注釋匈睁,很有用
- 總結(jié)
- 第一部分第四課預(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ū)域:
- 工具欄:有很多按鈕,但只有幾個是我們時常用到的梁丘。
- 項目文件列表區(qū):左邊的欄里面顯示了你的項目的所有文件侵浸。
- 主界面:寫代碼的地方。
- 通知欄:會看到運行的錯誤氛谜,編譯的問題掏觉,等等。
那么值漫,如何創(chuàng)建一個 C語言基本的控制臺應(yīng)用程序呢澳腹?
首先到菜單里,依次點擊“File -> New -> Project”杨何,
會打開類似如下的窗口:
可以看到酱塔,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!
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)的畫圖程序听系。它是一個窗口程序贝奇,就是有窗口的程序(有時候不止一個窗口)。我想你肯定想學(xué)習(xí)創(chuàng)建這樣的程序靠胜,但是如果你是第一次接觸編程掉瞳,那有點難。
一開始還是最好從 console(控制臺)程序入門髓帽。
那么,所謂的控制臺程序長什么樣呢脑豹?
最初的程序都是控制臺程序郑藏,因為那個年代電腦還只能顯示黑白色,而且也沒有強大到可以運行窗口程序瘩欺,不像今天的電腦必盖。
當(dāng)然了,時代在進步俱饿。Microsoft(微軟)公司的 Windows 系統(tǒng)使得電腦能被廣大群眾使用歌粥,就是因為它操作很簡單,幾乎所有操作都可以用窗口程序完成拍埠。
Windows 實在是太流行了失驶,以至于大多數(shù)人都不知道 console(控制臺)程序長什么樣。不過枣购,我有一個好消息:“控制臺程序并沒有死嬉探!”
實際上,Linux 操作系統(tǒng)給很多的人展示了控制臺程序的魅力棉圈,下圖就是 Linux 下的控制臺程序的截圖:
看上去還不錯涩堤,是嗎?好了分瘾,現(xiàn)在你已經(jīng)對控制臺程序有了初步概念了胎围。
有一些注意點:
- 今天電腦已經(jīng)可以顯示彩色了,所以上面看到的控制臺也不是完全黑白的了。
- 對于初學(xué)編程的人來說白魂,控制臺還是令人不太適應(yīng)的汽纤。
- 如果我們掌握了這個工具,可以用它來做很多事情碧聪。
就如我們上面提到的冒版,創(chuàng)建像上圖中的控制臺程序,其實很簡單逞姿,而且非常適合初學(xué)者〈俏耍現(xiàn)在的控制臺程序不僅可以顯示彩色,而且如果你要給它設(shè)置一個背景圖片滞造,也是可以辦到的续室。
說了這些,那是不是只有 Linux 才有控制臺程序谒养,Windows 就沒有呢挺狰?
當(dāng)然也有,在 Windows 中它被稱為 cmd买窟,也就是 command(表示“命令”)的縮寫丰泊,也稱為“命令提示符”,是 Windows 環(huán)境下的虛擬 DOS 窗口始绍。只不過它比較隱秘瞳购。可以用以下兩種把它請出來:
- 點擊“開始 -> 搜索 -> 輸入“cmd”亏推,然后按回車鍵学赛,或點擊“確定”。
- 用組合鍵 win+R 調(diào)出 (win 鍵就是鍵盤最下面從左邊數(shù)第二個鍵吞杭,上面有個 Windows 系統(tǒng)標(biāo)志的)盏浇,再輸入 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;
}
其中
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é)果
可以看到你的第一個程序在屏幕上顯示了 "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é)
- 程序可以通過一個控制臺(Console)或者窗口(Window)和用戶交互站叼。
- 對初學(xué)者來說用控制臺來編寫第一個程序要簡單很多,雖然不太吸引人菇民。
- C語言的程序主要是由分號結(jié)尾的語句構(gòu)成的尽楔。
- 多條指令可以寫在一個函數(shù)里,就好像包裝在一個盒子里一樣第练。
- main 函數(shù)是程序的啟動函數(shù)阔馋,程序運行時會執(zhí)行 main 函數(shù)里的指令。
- printf 函數(shù)使我們可以在控制臺的屏幕上顯示信息娇掏。
- 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)桿直跑」