C語言

[C語言]解析C語言

#include及標頭檔

之前所介紹過的stdio.hstdlib.h這兩個檔案,我們稱之為標頭檔(header file),它們被含括在程式碼的起頭處。

#include <標頭檔>

當C在編譯時,會把這行敘述以整個標頭檔的內容來取代。

為什麼不含括stdio.hstdlib.h標頭檔,還是可以編譯?

有些編譯器,就算沒有將stdio.hstdlib.h標頭檔載入,程式依然可以正確的編譯,這是因為這些編譯器會自動將常用的標頭檔載入。

對於語法檢查較嚴格的編譯器,如果沒有含括該有的標頭檔,可能會無法順利編譯。因此在撰寫程式碼時,建議習慣性的含括該有的標頭檔,也可以提高程式的可攜性。

標頭檔的特性及好處

在C語言中,性質較接近的函數,其格式通常都會宣告在同一個標頭檔裡。像是前面提到的stdio.h提供了與輸入/輸出有關的函數資訊;math.h提供了與數學有關的函數資訊(如sin(x));而有關時間函數的資訊則是宣告在time.h等等。

標頭檔裡已經包含了常用的函數及它們的宣告格式都定義好了,所以程式設計師不必花費時間撰寫相關的標頭檔,可以省下程式開發時間。

#include為C語言前置處理器(pre-processor)的指令,這種指令會在程式編譯之前執行,之後會看到一些以#開頭的指令,這些都是屬於前置處理器的指令。

main()及函數的本體

C程式是由許多函數組合而成,像是main()printf()都是C語言所提供的標準函數。main()是一個不可或缺的函數,因為它是程式執行的開端,因此每一個C程式必須有一個main()函數,且只能有一個。

main()函數而言,在左大括號({)及右大括號(})裡面的程式碼稱為本體(body)。本體內的每個指令敘述結束時,必須以分號(;)做結尾。

在C語言裡,我們把一個用來達成特定工作的程式片段稱為區塊(block),像是用來判斷條件的程式區塊,或是執行重複動作的迴圈區塊等。

變數

變數可以用來存放資料,在程式語言中扮演了最基本的角色。在使用變數前必須先宣告它將來要儲存的資料型態,這樣才能讓編譯器配置適合的記憶體空間給它。

變數的宣告

在程式中宣告一個可以存放整數的變數,變數的名稱為num

int num;  /* 宣告num為整數變數 */

如果要同時宣告多個整數變數,可以像上面一樣分別宣告它們,或是寫在同一個敘述中,但需要以逗號分開:

int num1, num2, num3;  /* 同時宣告三個整數變數 */
變數的資料型態

C語言的資料型態有字元(char)整數(int)長整數(long)短整數(short)浮點數(float)倍精度浮點數(double)等型態。除了這些,還可以決定變數為有號(signed)或是無號(unsigned)

變數的名稱與限制

通常會依照個人喜好來決定變數的名稱,但不可以使用到C語言的關鍵字(keyword)

我們可以用num還代表數字,car來代表車子,當然也可以使用abc等簡單的英文子母來代表某個變數。

有些編譯器會限制變數名稱的長度,所以在決定變數名稱時,要避免使用過長的變數名稱。

變數名稱的字元可以是英文字母、數字或底線,但不能是空白字元,且第一個字元不能是數字。下面是一些正確及錯誤的變數名稱:

apple_m1  /* 正確 */
_windows  /* 正確 */
2dogs     /* 錯誤,第一個字元不能是數字 */
return    /* 錯誤,return為C語言的關鍵字 */

變數的設值

宣告時設值
int num = 2;  /* 宣告並直接給值 */
宣告後設值
int num;   /* 宣告 */
char ch;   /* 宣告 */

num = 2;   /* 給值 */
ch = 'e';  /* 給值 */

為什麼要宣告變數

在撰寫直譯式語言時,常會把變數名稱輸入錯誤,造成程式在除錯上的困難。由於這些語言不需要宣告變數,因此無法檢查變數名稱的正確性。

當我們在C語言程式中宣告了變數的型態及名稱後,編譯器就可以很快的找到錯誤的變數名稱,可以節省不少時間。

printf()函數

printf()函數以格式化的輸出方式,將函數中的引數列印到螢幕中,其中引數間須以逗號隔開。

如果想在螢幕上印出I have 2 dogs.字串,其中2被存在變數num中,則code如下:

printf("I have %d dogs.\n", num);

%d符號是用來告訴編譯器,把整數num的值以十進位的格式輸出到這個位置。


#C語言 #解析C語言 #Analyze a C program

發佈留言