Friday, March 19, 2010

編譯器include優先順序

給未來的裕翔

寫一個簡單的main.c

#include <stdio.h>
#include <string.h>
int main(void)
{
printf("\n%d\n",strlen("12345"));
return 0;
}


因為有#include <string.h>

所以編譯器會自動去/usr/includestring.h


如果改成#include "string.h"

編譯器會include./string.h

由於不存在

所以編譯器會改成去/usr/include

如果從/usr/include複製一個string.h./

./string.h裡面的strlen定義改成sstrlen


編譯馬上出錯

表示對#include "string.h"來說, ./優先於/usr/include

如果在./新增資料夾include

把有錯的./string.h移到./include裡面

再次編譯, 會過, 表示對#include "string.h"來說

./找不到的話, 依舊去/usr/include搜尋

那如果在main.c裡面寫成#include "include/string.h"

或是編譯時指明inlcude位置, ex: gcc main.c -Iinclude


編譯會錯, 得知確實有找到./include/string.h

以上


No comments:

Post a Comment