C程式設計的基本政策是使用程式将源代碼檔案轉換為可執行檔案,此檔案包含可以運作的機器語言代碼。C分兩步完成這一工作:編譯和連結。編譯器将源代碼轉換為中間代碼,連結器将此中間代碼與其他代碼相結合來生成可執行檔案。C使用被劃分為兩部分的這一方法使程式便于子產品化。我們可以分别編譯各個子產品,然後使用連結器将編譯過的子產品結合起來。這樣,如果需要改變一個子產品,則不必重新編譯所有其他子產品。同時,連結器将自己的程式與預編譯的庫代碼結合起來。
中間檔案的形式有多種選擇。最一般的選這,同時也是大部分C程式員的選擇,是将源代碼轉換為機器語言代碼,将結果放置在一個目标代碼檔案(簡稱為目标檔案)中。雖然目标檔案包含機器語言代碼,但該檔案還不能運作。目标檔案包含源代碼的轉換結果,但該轉換結果并不是一個完整的程式。
目标代碼檔案中的所缺少的第一個元素的一種叫做啟動代碼(start-up code)的東東,此代碼相當于自己程式和作業系統之間的接口。
目标代碼中缺少的第二個元素是庫函數的代碼。幾乎所有C程式都利用标準C庫中包含的庫函數。比如printf()函數,目标代碼檔案不包含這一函數的代碼,它隻包含聲明使用printf()函數的指令。實際代碼存儲在庫中。庫檔案中包含許多函數的目标代碼。
連結器的作用是将這3個元素(目标代碼、系統的标準啟動代碼和庫代碼)結合在一起,并将它們存放在單個檔案,即可執行檔案中。對庫代碼來說,連結器隻從庫中提取我們編寫代碼中使用函數所需要的代碼。

簡而言之,目标檔案和可執行檔案都是由機器語言指令組成的。但目标檔案隻包含自己編寫的代碼轉換成機器語言,而可執行檔案還包含我們編寫代碼中使用的庫例程以及啟動代碼的機器代碼。
int num;//declaraion statement 聲明語句
這個特殊的例子聲明兩件事情。第一,在函數中有一個名為num的變量。第二,int說明num是一個整數,也就是說,這個數沒有小數點或者小數部分。編譯器使用這個資訊為變量num在記憶體中配置設定一個合适的存儲空間。句末的分号指明這一行是C語言的一個語句和指令。分号是語句的一部分,否則該語句被認為是不完整的;
例子中的單詞num是一個辨別符(idfentifier),也就是你為一個變量、函數或者其他實體所選的名字。這樣該聲明把一個特殊的辨別符和計算機記憶體中的一個特殊的位置聯系起來,同時确定了該位置存儲的資訊類型(也即資料類型)。
變量與常量的差別在于,變量的值可以在程式執行過程中變化與指定,而常量則不可以;
浮點數(floating-point)差不多可以和數學中的實數概念相對應。實數包含了整數之間的那些數。2.75、3.16E7、 7.00和2e-8都是浮點數。
最重要的一點是浮點數與整數的存儲方案不同。浮點數表示法将一個數分為小數部分和指數部分并分别存儲。是以盡管7.00和整數7有相同的值,但它們的存儲方式不同。與機器中的二進制存儲方式相似,在十進制中的7.0可表示0.7E1;
declaration statement 聲明語句
identifier 辨別符
assignment statement 指派語句
argument 參數
actual argument 實際參數
newline character 換行符
Escape Sequence轉義字元
reserved identifier 保留辨別符
format specifier 格式說明符
%0 %x
想要顯示C語言字首,可以使用說明符%#o、%#x、%#X分别生成0、0x、0X字首;
%d 是一個占位符
%告訴程式把一個變量在這個位置輸出,d告訴程式将輸出一個十進制整形變量;
printf()中的f暗示着這是一種格式化(formating)的輸出函數;
編譯器的一個常見毛病是發現的錯誤位置比真正的錯誤要滞後一行,例如,編譯器
要編譯下一行時才發現上一行缺少一個分号。是以,如果編譯器指出來某個具有分号
的行少了分号,那麼請檢查上一行;
字(word)是自然的存儲機關,8位機,一個字8位,16位機,一個字16位,32位機,一個
字32位;
int類型存儲在計算機的一個字中;
為什麼說long和short類型“可能”占用比int類型更多或者更少的存儲空間呢?因為C僅保證
short類型不會比int類型長,并且long類型不會比int類型短,這樣做是為了适應不同的機器;
(涉及到不用廠商生産晶片不同)