# 練習1:啟用編譯器
> 原文:[Exercise 1: Dust Off That Compiler](http://c.learncodethehardway.org/book/ex1.html)
> 譯者:[飛龍](https://github.com/wizardforcel)
這是你用C寫的第一個簡單的程序:
```c
int main(int argc, char *argv[])
{
puts("Hello world.");
return 0;
}
```
把它寫進 `ex1.c` 并輸入:
```sh
$ make ex1
cc ex1.c -o ex1
```
你的編譯器可能會使用一個有些不同的命令,但是最后應該會產生一個名為`ex1`的文件,并且你可以運行它。
## 你會看到什么
現在你可以運行程序并看到輸出。
```c
$ ./ex1
Hello world.
```
如果沒有,則需要返回去修復它。
## 如何使它崩潰
在這本書中我會添加一個小節,關于如何使程序崩潰。我會讓你對程序做一些奇怪的事情,以奇怪的方式運行,或者修改代碼,以便讓你看到崩潰和編譯器錯誤。
對于這個程序,打開所有編譯警告重新構建它:
```sh
$ 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.
$
```
現在你會得到一個警告,說`puts`函數是隱式聲明的。C語言的編譯器很智能,它能夠理解你想要什么。但是如果可以的話,你應該去除所有編譯器警告。把下面一行添加到`ex1.c`文件的最上面,之后重新編譯來去除它:
```c
#include <stdio.h>
```
現在像剛才一樣重新執行make命令,你會看到所有警告都消失了。
## 附加題
+ 在你的文本編輯器中打開`ex1`文件,隨機修改或刪除一部分,之后運行它看看發生了什么。
+ 再多打印5行文本或者其它比`"Hello world."`更復雜的東西。
+ 執行`man 3 puts`來閱讀這個函數和其它函數的文檔。
- 笨辦法學C 中文版
- 前言
- 導言:C的笛卡爾之夢
- 練習0:準備
- 練習1:啟用編譯器
- 練習2:用Make來代替Python
- 練習3:格式化輸出
- 練習4:Valgrind 介紹
- 練習5:一個C程序的結構
- 練習6:變量類型
- 練習7:更多變量和一些算術
- 練習8:大小和數組
- 練習9:數組和字符串
- 練習10:字符串數組和循環
- 練習11:While循環和布爾表達式
- 練習12:If,Else If,Else
- 練習13:Switch語句
- 練習14:編寫并使用函數
- 練習15:指針,可怕的指針
- 練習16:結構體和指向它們的指針
- 練習17:堆和棧的內存分配
- 練習18:函數指針
- 練習19:一個簡單的對象系統
- 練習20:Zed的強大的調試宏
- 練習21:高級數據類型和控制結構
- 練習22:棧、作用域和全局
- 練習23:認識達夫設備
- 練習24:輸入輸出和文件
- 練習25:變參函數
- 練習26:編寫第一個真正的程序
- 練習27:創造性和防御性編程
- 練習28:Makefile 進階
- 練習29:庫和鏈接
- 練習30:自動化測試
- 練習31:代碼調試
- 練習32:雙向鏈表
- 練習33:鏈表算法
- 練習34:動態數組
- 練習35:排序和搜索
- 練習36:更安全的字符串
- 練習37:哈希表
- 練習38:哈希算法
- 練習39:字符串算法
- 練習40:二叉搜索樹
- 練習41:將 Cachegrind 和 Callgrind 用于性能調優
- 練習42:棧和隊列
- 練習43:一個簡單的統計引擎
- 練習44:環形緩沖區
- 練習45:一個簡單的TCP/IP客戶端
- 練習46:三叉搜索樹
- 練習47:一個快速的URL路由
- 后記:“解構 K&R C” 已死