c的實現中包括兩種環境:
1.翻譯環境(translation environment):源程序---->機器指令
2.執行環境(execution environment):執行機器指令
這兩種環境不必位於同一機器。
翻譯:
翻譯會將源文件編譯成為目標文件(object code),然後鏈接器(linker)將各個目標文件鏈接到一起,形成一個可執行文件。
鏈接器同時也會引入程序中調用的外部文件的函數。
編譯:
1.預處理:處理偽指令和特殊符號
偽指令包括宏定義指令(#define)、 條件編譯指令(#ifdef,#ifndef,#else,#elif,#endif)、頭文件包含指令(#include)
特殊符號:LINE(當前行數)、FILE(當前被編譯的源程序的名稱)等
2.解析:詞法分析和語法分析,生成目標代碼
3.優化:優化器(optimizer)對目標文件進行優化
unix下的指令:
1.gcc(cc) program.c ----->直接生成a.out可執行文件,中間生成的目標文件會在鏈接後刪除
2.gcc(cc) main.c sort.c lookup.c ---->一次編譯超過一個文件,生成的目標文件不會背刪除
3.gcc(cc) main.c -o main ---->指定生成的文件名為main
4.gcc(cc) -c main.c ---->生成目標文件