我是個有**「潔癖」的人,不願意與警告為伍,哪怕是只有乙個,也會讓我渾身上下都不舒服。在一次整改乙個嵌入式arm工程源**的過程中,乙個編譯告警迷惑了我,費了我不少時間。
waring : c2207w : inventing 'extern inituartpos();'
main.c line 87
按理說不應該出現這種告警,因為main.c中已包含了對函式「inituartpos()」的宣告檔案「uartpos.h」
#include "uart.h" //declare in main.c
#include "uartpos.h" //declare in main.c
以下是「
uartpos.h
」中「inituartpos」函式的宣告
#ifndef __uart_h__
#define __uart_h__
#include "44b.h"
……void inituartpos(unsigned mclk, unsigned bps);
// 初始化pos串列埠
……#endif
看來,無論如何也不會有「函式inituartpos()未宣告
」的錯誤。查了幾次,都覺得這個編譯器告警不可思議。後來某天,無意中開啟了「uart.h」
標頭檔案,發現該檔案內容如下:
#define __uart_h__
防止標頭檔案重複包含
在程式設計中,經常會遇到這種情況,我們的某乙個程式會呼叫多個dll,因此需要包含多個標頭檔案,不同的標頭檔案可能包含了相同某乙個下一級標頭檔案,這就可能會導致標頭檔案的重複包含,從而導致變數 函式的重定義等等,為了解決這個問題,就要求我們在編寫dll的時候,使用 ifndef define endi...
防止標頭檔案的重複包含
防止標頭檔案重複包含的巨集想必大家都清楚,ifndef define endif就是幹這個用的,面試中也考過。我也是知道這個巨集的作用,今天我們就來實戰測試一下,網上說的那是別人的東西,只有自己測試過出結果的才是自己的東西。localhost test ls a.h test.c test.h lo...
防止標頭檔案重複包含方法
編譯器支援 標準未定義 由編譯器保證不會重複包含物理上的同乙個檔案 ifndef test.h define test.h code endif 條件編譯是標準支援的 因為標準支援 define定義的識別符號 不會重複引入同名的檔案 存在不小心寫錯define識別符號導致重複引入的問題 所以有些c標...