許多初學者認為 hello world 只是顯示字串的簡單程式,實則不然。這 6 行代碼蘊含了 C 語言的核心骨架:定義區與函數區。掌握這「最少的語句,達到最佳的掌握」是邁向高手的關鍵——學會看透具體語句背後的抽象規律。
#include "stdio.h"
main()
{
fprintf(stdout, "hello world!\n");
exit(0);
}
#include "stdio.h" 引入標準輸入輸出庫定義main 入口函數這結構讓我們在撰寫任何 C 程式時,先問自己:「我的定義是什麼?我的函數有哪些?」
為何必須是 main?可執行程式需要統一、唯一的進入點。若無 main,編譯器無法決定先執行哪個函數。這概念可延伸至其他語言:VFP 的 load、C# 的 Page_Load 皆為入口函數。找到主函數,即掌握初始化的主動權。
違背語法即編譯失敗。關鍵規則包括:
#include "檔名":拼寫、符號(#、雙引號)、分號皆不可錯main():函數名後必接一對小括號,不可加分號{ }:函數主體邊界,缺一不可呼叫格式:函數名 + 參數 + 分號,三者缺一不可。初學者常漏寫分號,養成習慣至關重要。本程式呼叫兩個函數:
fprintf(stdout, "hello world!\n"):格式化輸出到標準輸出流exit(0):正常退出,返回值 0 供上層流程判斷雖無 exit(0) 程式也會結束,但「有進有出」是規範寫法,提升可讀性與維護性。
#include "" 與 #include <>:新手只需掌握一種(通常用雙引號),除非必要才深究搜尋路徑差異.h(如 stdio.h = standard I/O),高手會引用自訂標頭檔include、main 等為保留字,不可自訂同名識別碼。水平越高的工程師越常面臨命名衝突,因越接近系統層開發。
\n(換行,new line)、\r(歸位)、\\(反斜線本身)等,是 C 語言處理控制字元的標準方式。
stdout 是標準輸出流,可視為通往裝置(螢幕)、檔案或另一流程的管道。透過 Shell 重導向:
./a.out > 1.txt # 輸出導向檔案
cat 1.txt # 檢視檔案內容
這揭示了流可被動態重導向的本質,也是 Unix/Linux 哲學的核心體現。
若你只看到 printf 怎麼寫,而無法說明上述 8 點,說明基礎薄弱。建議嘗試修改程式輸出 3 次 Hello World,並自我檢視是否真正理解每行代碼的意義。萬丈高樓平地起,這「平地」值得反復打磨。