程式的架構

Hello World! 這篇中,我們介紹了基礎的 C 語法。

#include <stdio.h> int main(void) { printf("Hello World!\n"); return 0; }

下面來介紹一下 C 語言這樣寫的理由。

函式庫

#include <header>

#include 後的 header 我們稱作標頭檔,把 header 替換成自己要的標頭檔,
像是 stdio.h 與之後會介紹到的 math.hstring.h 等都是標頭檔之一。

header 就是跟程式說你今天要做什麼,程式就會幫你找到對應的功能。
例如今天你需要輸入與輸出,就用 #include <stdio.h> 跟程式說你要這些功能,
程式就會調用它並讓你使用裡面的內容。
但如果你沒有 #include <stdio.h>,程式就不會讓你使用輸入或輸出的功能。

透過標頭檔,我們可以連結到實現程式功能的函式庫 library。可以把標頭檔想成電話號碼,函式庫想成接線員,透過撥打電話來得到接線員的協助。

不過調用標頭檔與使用不是絕對的關係,
可以調用後不使用,但絕對不能不調用就使用,這樣會出錯。
就像是我可以買了飲料後不喝他,但我不能在還沒買到飲料前就喝到飲料,不符合邏輯也喝不到飲料。

錯誤訊息會顯示
error: 'something' was not declared in this scope
意思是 something 在此範圍未被宣告,
這裡的 something 可以被替換成其他東西,像是 scanf 或是 printf
IDE 會告訴你是哪一個字詞出錯了。

主要程式

int main(void) { printf("Hello World!\n"); return 0; }

主程式

int main(void) { }

第一個詞 int,這是整數的意思。
main 函式中,只能用整數型別(int)返回數值
這裡返回的數值是指主要程式中的 return 0;,等等會介紹到這個。

而在 main 函式中的 void 的意思,等同於什麼也沒有放的 main()
但由於 C 語言早期版本設計不夠優良,沒有放 void 可能會在預期外的情況啟動主程式(e.g.帶有參數時,下學期會講),所以記得要加上 void

雖然不是整數型別也可以編譯,但 IDE 會跳出 warning
編譯器會自動改為整數型別,不過仍建議打上 int main(void)

程式碼

printf("Hello World!\n");

在主程式中輸入你需要的程式功能,不然程式是不會憑空做事的!

回傳值

return 0;

為什麼要回傳值?這是為了告訴執行程式的上級—父程序(Parent)—程式有正確執行
不過 return 0; 不是只能回傳 0 ,也可以回傳其他整數數值,
像是 1 或是非零整數 通常代表程式執行錯誤、65 會回傳 A (ASCII碼),
還有其他在不同系統下具有不同含意的數字。

若不打上 return 0;,會有兩種可能:

  1. 編譯器會自動補上 return 0;
  2. 遇到左大括號 } 時,回傳 0 。

不過 1. 的情況並不是所有編譯器都有,
所以要記得打上 return 0; 避免錯誤。

課堂簡報中偶爾會出現 system("pause"),功用是讓命令視窗停留一陣子不要馬上消失,以便觀察程式的輸出。但它不是必要的,因為新版的 IDE 都有使視窗暫留的功能。

tags: C language