鍍金池/ 教程/ C/ 練習(xí)1:?jiǎn)⒂镁幾g器
練習(xí)9:數(shù)組和字符串
練習(xí)6:變量類型
練習(xí)3:格式化輸出
練習(xí)4:Valgrind 介紹
練習(xí)28:Makefile 進(jìn)階
練習(xí)14:編寫并使用函數(shù)
練習(xí)21:高級(jí)數(shù)據(jù)類型和控制結(jié)構(gòu)
練習(xí)20:Zed的強(qiáng)大的調(diào)試宏
練習(xí)18:函數(shù)指針
練習(xí)0:準(zhǔn)備
練習(xí)15:指針,可怕的指針
練習(xí)27:創(chuàng)造性和防御性編程
練習(xí)22:棧、作用域和全局
練習(xí)10:字符串?dāng)?shù)組和循環(huán)
練習(xí)8:大小和數(shù)組
練習(xí)16:結(jié)構(gòu)體和指向它們的指針
練習(xí)7:更多變量和一些算術(shù)
練習(xí)23:認(rèn)識(shí)達(dá)夫設(shè)備
練習(xí)12:If,Else If,Else
練習(xí)2:用Make來代替Python
練習(xí)1:?jiǎn)⒂镁幾g器
練習(xí)11:While循環(huán)和布爾表達(dá)式
練習(xí)5:一個(gè)C程序的結(jié)構(gòu)
練習(xí)24:輸入輸出和文件
練習(xí)25:變參函數(shù)
練習(xí)13:Switch語句
練習(xí)19:一個(gè)簡(jiǎn)單的對(duì)象系統(tǒng)
練習(xí)26:編寫第一個(gè)真正的程序
導(dǎo)言:C的笛卡爾之夢(mèng)
練習(xí)17:堆和棧的內(nèi)存分配

練習(xí)1:?jiǎn)⒂镁幾g器

這是你用C寫的第一個(gè)簡(jiǎn)單的程序:

int main(int argc, char *argv[])
{
    puts("Hello world.");

    return 0;
}

把它寫進(jìn) ex1.c 并輸入:

$ make ex1
cc     ex1.c   -o ex1

你的編譯器可能會(huì)使用一個(gè)有些不同的命令,但是最后應(yīng)該會(huì)產(chǎn)生一個(gè)名為ex1的文件,并且你可以運(yùn)行它。

你會(huì)看到什么

現(xiàn)在你可以運(yùn)行程序并看到輸出。

$ ./ex1
Hello world.

如果沒有,則需要返回去修復(fù)它。

如何使它崩潰

在這本書中我會(huì)添加一個(gè)小節(jié),關(guān)于如何使程序崩潰。我會(huì)讓你對(duì)程序做一些奇怪的事情,以奇怪的方式運(yùn)行,或者修改代碼,以便讓你看到崩潰和編譯器錯(cuò)誤。

對(duì)于這個(gè)程序,打開所有編譯警告重新構(gòu)建它:

$ rm ex1
$ CFLAGS="-Wall" make ex1
cc -Wall    ex1.c   -o ex1
ex1.c: In function 'main':
ex1.c:3: warning: implicit declaration of function 'puts'
$ ./ex1
Hello world.
$

現(xiàn)在你會(huì)得到一個(gè)警告,說puts函數(shù)是隱式聲明的。C語言的編譯器很智能,它能夠理解你想要什么。但是如果可以的話,你應(yīng)該去除所有編譯器警告。把下面一行添加到ex1.c文件的最上面,之后重新編譯來去除它:

#include <stdio.h>

現(xiàn)在像剛才一樣重新執(zhí)行make命令,你會(huì)看到所有警告都消失了。

附加題

  • 在你的文本編輯器中打開ex1文件,隨機(jī)修改或刪除一部分,之后運(yùn)行它看看發(fā)生了什么。
  • 再多打印5行文本或者其它比"Hello world."更復(fù)雜的東西。
  • 執(zhí)行man 3 puts來閱讀這個(gè)函數(shù)和其它函數(shù)的文檔。