在ansiC的任何一種實現中,存在兩個不同的環境。
第1種是翻譯環境,在這個環境中源代碼被轉換為可執行的機器指令。
第2種是執行環境,它用于實際執行代碼。
翻譯環境
? ? ?組成一個程序的每個源文件通過編譯過程分別轉換成目標代碼(object
? ? code)。
? ? . 每個目標文件由鏈接器(linker)捆綁在一起,形成一個單一而完整的可執行程序。
? ? . 鏈接器同時也會引入標準C函數庫中任何被該程序所用到的函數,而且它可以搜索程序員個人的程序庫,將其需要的函數也鏈接到程序中。
代碼示例:
add.c
int Add(int x,int y) {
? ? return x + y;
}
test.c
#include<stdio.h>
extern int Add(int,int);
int main() {
? ? int a = 10;
? ? int b = 20;
? ? int c = Add(a, b);
? ? printf("%d",c);
}
當add.c和test.c進行鏈接時,檢測到Add函數在add.c中存在定義,而在test.c中沒有定義,于是鏈接之后Add函數就繼承了add.c中為其定義的地址,所以說鏈接可以檢查函數是否定義;
? ?