C (程式語言)

(由C 程式語言跳轉過嚟)
  提示:呢篇文講嘅唔係C++C § 

C程式語言係一隻電腦程式語言,通常淨係叫C。佢係丹尼士列奇(Dennis Ritchie)響1970年代作畀Unix操作系統用嘅。因為佢兼具高低階語言特徵,所以用途廣泛:由底層操作系統到上層唔同軟件,都可以用C嚟寫。

C程式語言嘅標誌

設計

編輯

C語言設計目標係提供一種能以簡易嘅方式編譯、處理低階記憶體、產生最少嘅機械碼同啲唔需要任何執行環境支援就行到嘅程式語言。縱使C語言有咗好多低階處理嘅功能,但喼住良好跨平台嘅特性,以一個標準規格寫出嘅C語言程式可以喺第啲電腦平台上進行編譯,甚至有埋啲嵌入式處理器同埋超級電腦嘅作業平台。

概述

編輯

特性

編輯
  • C語言係個有結構化程式設計、有變量作用域(variable scope)同遞迴功能嘅程式語言。
  • C語言傳遞參數均係以值傳遞[1],仲可以傳個指針。
  • 唔同嘅變數類型可以用結構體(struct)組合埋。
  • 得32隻保留字(reserved keywords),令變量、函數命名彈性啲。
  • 部份嘅變量類型轉得,例如整型同字符型變量。
  • 透過指標(pointer)等C語言易啲低階控制記憶體。
  • 編譯預處理(preprocessor)畀C語言嘅編譯更具彈性。

語法

編輯

Hello World 程序

編輯

下面係一個輸出設備(stdout)印串字 "Hello, world!" 出嚟嘅簡單程式,通常係初學程式語言嗰陣嘅第一個程式:

#include <stdio.h>

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

了解

編輯

C語言由函數同變量組成,函數就似係Fortran入面嘅子程序同函數。 C嘅程序從 main 開始行。main() 函数會調用同控制第啲函數嚟做嘢,例如上面嘅printf。程式員可以自己寫函數,或從庫中調用函數。喺上面嘅return 0;令到main()畀返個值去調用程序嘅殼層,表明程序成功行完。

一個C語言嘅函數由返回值、函數名、參數列表同函數體組成。函數體嘅語法同啲複合句一樣。

複合句

編輯

C語言複合句嘅格式係:

{
    語句;
    語句;
    /* ... */
}

複合句可以令幾句語句喺文法上變成個語句。

有時複合句係必須嘅,唔用就會產生錯誤。好似用循環語句,萬一有幾句嘢,最好用返括號將佢哋合併做句複合語句。冇複合語句,系統就齋睇第一個分號前嘅內容做成個循環體。

需要注意嘅係,部分C編譯器並唔撐喺任意位置度用複合句。

條件句

編輯

C語言有兩種條件句形式,分别係ifswitch

If 嘅格式係噉:

if(算術式) // 萬一
    語句; 
// 仲有時會else:
else      // 否則
    語句;

算術式嘅值如果唔係零就代表條件係真;如果條件係假嘅,程式會跳過if度嘅語句,直接行之後嘅語句。但係如果if後面有else而條件係假嘅話,程式會跳去else度執行。ifelse後面嗰句可以係第個if語句。有呢種套疊式嘅結構先有更複雜嘅邏輯控制流程。喺一般情況下,else實同最近嘅if成啤,所以會成日用啲括弧{}越過呢個限制。比較下面兩種情況:

if(論理式)
    if (論理式)
        語句; 
    else
        語句;
if(論理式A)
{
    if(論理式B)
        語句;
}
else 
    語句;

要注意依度嘅縮進同換行齋係方便啲嚟讀。編譯器唔識依啲縮進層級估個 if 同 else 對應嘅關係。

switch通常用响對幾種有明確值嘅條件。佢要求嘅條件值通常係整數或者字元。同switch搭配嘅條件轉移係case。控制程式會跳到滿足條件嘅case一直向下執行,直到語句完曬或者撞到break。通常用到default將第啲例外嘅情況包埋。如果switch語句入面有唔成立嘅條件,控制程式會跳去default行;冇咗default,就會直接行下句語句。switch係可以嵌套嘅。

switch 個值出嚟
{
  case A:
  case B:
    語句段一; // AB都行緊
    // 第啲句…
    break;  // 跳到去 switch 最後嗰度
  case C:
    語句段二;
    break; 
  default:  // 唔係A、B、C嘅會嚟伊度
}

If句式可以省略成噉:

// 算術式?值1:值2;
// 如:
   a = b>c ? b : c // 如果變數b嘅值大過變數c就將變數b嘅值俾哂變數a

循環句

編輯

C語言有三種循環句:

do
    語句;
while(判斷式); 

// 同:

while(判斷式) 
    語句;

// 同:

for(初始化;判斷式;算術式)
    語句;

whilefor入面,語句不斷行直到判斷式嘅值係零。喺do...while語句入面,循環仲會先行一次。呢三種循環結構可以互相轉化:

for(初始化;判斷式;算術式)
    語句;

如果語句冇用continue語句,就相當於

初始化;
while (判斷式) {
    語句;
    算術式;
}

當循環條件一直係真嗰陣,就會產生無窮迴圈

跳轉句

編輯

跳轉句包括四種:goto、continue、break同return

goto 標記;

goto語句係無條件轉移句,標記一定要喺當前函數嘅定義,要用標記:嘅格式定義。程式會跳到去標記度繼續執行。由於goto難讀啲,所以對新手嚟講係少用啲。GCC 編譯器拓展撐對指針goto同埋宏內嘅goto,一定程度上增強咗goto嘅可讀性。

continue語句用喺迴圈句入面,作用係完哂前一輪嘅迴圈,即刻開始下一輪迴圈。

break語句用喺迴圈句定switch入面,作用係完咗當前迴圈,跳出循環體外繼續行。但係break跳得一層迴圈。要跳出多重迴圈嗰陣,可以用goto令至程式更為簡潔。

當一個函數行完,要俾返回值嗰陣用returnreturn可以係個運算式或變數。如果return後面冇值就會乜都唔俾。

C語言嘅變種

編輯

參考資料

編輯
  1. Brian W. Kernighan and Dennis M. Ritchie (1988). The C programming Language (英文). Prentice-Hall. ISBN 0-13-110362-8. In C, all function arguments are passed ``by value.