發信人: ax.bbs@bbs.ee.nthu.edu.tw. (athena), 信區: test
標  題: 星星流講座 0002
發信站: ☆清華電機☆ (Mon May  1 09:59:14 1995)
轉信站: star

星星流講座 0002         C 語言教室

第 1 講 之 2    A whole new world
                Topic: C 語言程式的基本架構

現在回到我們剛剛輸入的程式上,我們來看看到底它是如何工作的,先看第一行:

/* hello.c */

這種用 /* 和 */ 括起來的東西叫註解 (remark),是用來註解程式用的。註解會
被編譯器完全地忽略,這是 C 語言比較特殊的地方,請特別注意。
好的程式應該有簡明恰當的註解。再來看到:

#include <stdio.h>

以 # 開頭的東西叫編譯指示 (compiler directives),它的作用是指示編譯器照
著編譯指示去編譯你的程式。#include 的意思就是在編譯這個程式之前,請編譯
器先引入標頭檔 (header file) 加以編譯,編譯完之後再編譯本程式下面的部份
。所以說呢,#include <stdio.h> 的意思就是叫 compiler 先編譯 stdio.h 這個
檔然後再編譯下面的程式。我們以一個簡單的流程圖表示如下:

                        gcc 編譯 hello.c
                              ↓
                        看到了 #include <stdio.h>
                              ↓
                        gcc 去找尋 stdio.h
                              ↓ 找到了
                        gcc 先編譯 stdio.h
                              ↓ 編譯完畢
                        gcc 再編譯 hello.c 剩下的部份
                              ↓ 編譯完畢
                        gcc 呼叫 ld 來連結
                              ↓
                        hello 這個程式製作完畢

你也可以把 #include <stdio.h> 寫成 #include "/usr/include/stdio.h",
可以得到同樣的效果。那麼,#include 後面接角括號 < > 和雙引號 " " 有何不同呢?
角括號括起來的檔案通常表示那個檔案是個標準標頭檔 (standard header file)。如果
是標準標頭檔,編譯器會到某個固定的地方去找這個檔案(至於是那個地方那就不一定了
,看當初安裝系統的時候是怎麼裝的)。用雙引號括起來的檔案通常表示那是個使用者自
定的標頭檔 (user-defined header file),所以你必須給編譯器完整的路徑 (file
path) 它才能找的到。

再來我們看到:

main ()
{
    printf ("Hello, world!\n");
}

main 是一個函數,也是 C 程式的主體 (不然叫 main 做啥?),你的程式會
由 main 函數開始執行。printf 是另一個函數,它負責顯示訊息到螢幕上。
C 語言中函數的意義我們以後會講,你現在只要知道 main () 是一個函數,
printf () 也是一個函數就可以了。那兩個大括號 { } 是幹什麼用的?
用大括號括起來的東西,我們叫它做一個程式區塊 (program block)。緊
跟在函數定義後的程式區塊叫函數本體 (function body),也就是說,

{
    printf ("Hello, world!\n");
}

這個程式區塊就是 main () 這個函數的函數本體。再來仔細看這一行:

printf ("Hello, world!\n");

看到行末的分號了沒? 程式區塊中的每一行都要以分號來表示這一行結束了

Q: 分號代表一行的結束,可是我的程式這樣寫為什麼不對?

/* hello.c */

#include <stdio.h>

main ()
{
    printf ("Hello, world!
\n");
}

編譯結果:

[thccy14]/Oz/u/u80/ee/u801833/program> cc -o hello hello1.c
"hello1.c", line 7: newline in string or char constant
"hello1.c", line 8: illegal character: '\'
"hello1.c", line 8: syntax error at or near variable name "n"

"hello1.c", line 8: syntax error at or near variable name "n"
"hello1.c", line 8: newline in string or char constant

A: 因為標準 C 中這種做法是不允許的,你必須寫成

/* hello1.c */

#include <stdio.h>

main ()
{
    printf ("Hello, world!\
\n");
}

才可以,也就是若是下一行和上一行是同一行的話,上一行的行尾必
須加上倒斜線 \ 來表示