C語言設計目標係提供一種能以簡易嘅方式編譯、處理低階記憶體、產生最少嘅機械碼同啲唔需要任何執行環境支援便能執行嘅程式語言。儘管C語言提供咗好多低階處理嘅功能,但仍保持良好跨平台嘅特性,以一個標準規格寫出嘅C語言程式可以喺第啲電腦平台上進行編譯,甚至包含咗啲嵌入式處理器同埋超級電腦嘅作業平台。
- C語言係個有結構化程式設計、具有變量作用域(variable scope)同埋遞迴功能嘅程序式語言。
- C語言傳遞參數均係以值傳遞[1],仲可以傳個指針。
- 唔同嘅變數類型可以用結構體(struct)組合埋一齊。
- 淨係有32個保留字(reserved keywords),令變量、函數命名更有彈性。
- 部份嘅變量類型可以轉換,例如整型同字符型變量。
- 透過指標(pointer)嚟等C語言可以容易咁應對記憶體進行低階嘅控制。
- 編譯預處理(preprocessor)畀C語言嘅編譯更具有彈性。
Hello World 程序[編輯]
下面係一個輸出設備(stdout)印刷出嚟嘅 "Hello, world!" 串字嘅簡單程式,通常作為初學程式語言時嘅第一個程式:
1 #include <stdio.h>
2
3 int main(void)
4 {
5 printf("Hello, world!\n");
6 return 0;
7 }
C語言由函數同變量組成,C嘅函數就似係Fortran入面嘅子程序同函數。
喺C语言中,程序從 main
執行開始。main
函数通過調用同控制第啲函數進行緊嘅工作。例如上面嘅printf
。程序員可以自己寫函數,或從庫中調用函數。喺上面嘅return 0;
令到 main
畀返個值去調用程序嘅殼層,表明程序係咪成功咁運行。
一個C語言嘅函數由返回值、函數名、參數列表同函數體組成。函數體嘅語法同第個複合句嘅部分係一樣。
複合句[編輯]
C語言入面複合句嘅格式係:
複合句可以令幾個語句喺文法上變成個語句。
有時都要用複合句,唔然嘅話會產生錯誤。例如,運用循環語句嗰度,萬一循環體包含多個語句,最好用花括號將佢哋合併成一個複合語句。如果唔做嘅話,系統淨係將第一個分號前嘅內容睇做成個循環體。
需要注意嘅係,部分C編譯器並唔撐喺任意位置度用複合句。
條件句[編輯]
C語言有两種條件句形式,分别係if和switch。
If 嘅格式係咁:
if(算術式) // 萬一
語句;
// 仲有時會else:
else // 唔然嘅話
語句;
算術式嘅值非零表示條件係真;如果條件係假嘅,程式將跳過if度嘅語句,直接咁執行if後面嘅語句。但係如果if後面有else,則當條件係假嗰陣,程式跳到else度執行。if和else後面嗰句可以係第個if語句,呢種套疊式嘅結構,許可更複雜嘅邏輯控制流程得以實現。喺一般情況下,else一定與最接近嘅if成對,因此成日用嘅括弧{}越過呢個限制。比較下面兩種情況:
if(論理式)
if (論理式)
語句;
else
語句;
1 if(論理式A)
2 {
3 if(論理式B)
4 語句;
5 }
6 else
7 語句;
要注意依度嘅縮進同埋換行淨係用嚟方便去讀。編譯器唔會根據個縮進層級估個 if 同 else 對應嘅關係。
switch通常用於對幾種有明確值嘅條件進行同控制。佢要求嘅條件值通常係整數或者字元。與switch搭配嘅條件轉移係case。使用case後面嘅標值,控制程式將跳到滿足條件嘅case度一直向下執行,直到語句完咗或者遇到break。通常可以用default將第啲例外嘅情況包含喺入面。如果switch語句入面有唔成立嘅條件,控制程式將跳到default嗰度執行;如果省略咗default嗰句,就直接執行下一語句。switch係可以嵌套嘅。
switch個值出嚟
{
方案 A:
方案 B:
語句段1; // AB都係執行緊
// 第啲语句…
break; // 跳到去 switch 最後嗰度
case 丙:
語句段2;
break;
default: // 無論點樣都會分配
}
簡單嘅判斷都得?:
算術式?值1:值2;
如:
a=b>c?b:c // 如果變數"b"嘅值大過變數"c" 將變數"b"個值賦予哂變數"a"
循環句[編輯]
C語言有三種形式嘅循環句:
do
語句
while(判斷式);
和:
while(判斷式)
語句;
和:
for(初始化; 判斷式;算術式)
語句;
喺while同埋for入面,語句將執行到表達式個值為零嗰陣完咗。喺do...while語句入面,循環仲會至少會俾執行一次。呢三種循環結構可以互相轉化:
如果語句唔用得continue語句,相當於
初始化;
while (判斷式) {
語句;
算術式;
}
當循環條件一直係真嗰時,會產生無窮迴圈。
跳轉句[編輯]
跳轉句包括四種:goto,continue,break和return。
goto語句係無條件轉移句,標記一定要喺當前函數嘅定義,要用“標記:”嘅格式定義。程式會跳到去標記度繼續執行。由於goto容易產生閱讀上嘅困難,所以對新手嚟講係少啲用。 GCC 編譯器拓展撐對指針 goto同埋宏內嘅goto,一定程度上增強咗goto嘅可讀性。
continue語句用喺迴圈句入面,作用係完哂前一輪嘅迴圈,即刻開始下一輪迴圈。
break語句用喺迴圈句定switch入面,作用係當前迴圈完咗,跳到循環體外繼續執行。但係用break淨跳出一層迴圈。跳出多重迴圈嗰陣,可以用goto令至程式更為簡潔。
當一個函數執行完咗後要俾個返回值嗰陣,用return。return可以同個運算式定變數。如果return後面冇值,將執行唔返回值。