解決標頭檔案定義變數的問題,巧用巨集定義 續)

2021-07-28 17:52:13 字數 709 閱讀 1545

繼昨天遇到的標頭檔案定義變數問題,總得要想辦法解決啊,不然xcode沒法除錯啊~~

改還得要從頭檔案改起,想到符號重複問題是因為多個.c都包含了這個標頭檔案,都定義了一次,所以鏈結就不知道要哪乙個了啊,常見的解決辦法不就是加extern唄。但是這個工程師所有的都是包含的乙個「萬能」標頭檔案,所以要是加了extern不就沒定義了麼?說到這兒可能有人已經想到解決辦法了,沒錯,就是讓其中乙個包含這個標頭檔案的.c檔案來定義,其他的所有.c檔案都是extern的宣告就好了,所以必然要用巨集了唄

#ifdef   ***

***#else

extern ***

#endif

答題就是如此了,在其中乙個.c檔案中#define ***就好了,千萬不能再工程中定義這個巨集,否則所有的.c檔案就都有這個巨集定義了。

但是總不可能讓我吧所有的變數都加上exter吧,好累哦,想到乙個好辦法,還是只有用巨集

#define int extern int

#define short extern short

***xx

#undef int

#undef short

這樣就好了,記住後面一定要有#undef 不然不就亂套了。看來有時候巨集定義真是個好東西。

終於可以愉快地研究演算法了,呵呵!

標頭檔案定義變數的問題

這次又犯了標頭檔案定義變數的錯誤問題,關鍵是linux環境下還不報錯!例子如下 在common config.h標頭檔案中定義了如下變數 int channel num 1024 後在檔案中的乙個函式中修改此變數為120,但是退出此函式後,列印出變數的值,竟然依舊是1024。正確的做法是在commo...

systemcall標頭檔案巨集值定義

long syscall longnumber,syscall的第乙個引數number根據例子程式都是使用sys 定義的呢?根據man 2 syscall可以看到number是使用的 include 標頭檔案,裡面又 include 和 include 其中asm unistd.h裡面根據平台不同最...

glibc標頭檔案和巨集定義

標頭檔案沒啥好說的,無非就是 和 的區別,這估計只要是學過c c 的人都明白。現在的編譯器對頭檔案的包含順序沒有要求,但老的c實現則不一樣。當然,我們現在無需關心標頭檔案順序了。我們為啥要包含標頭檔案呢?標頭檔案裡面有定義嘛,使用任何函式之前都必須定義該函式。所以我們並不強求包含標頭檔案,只要你自己...