標頭檔案中防止重複定義的巨集

2021-04-17 20:25:43 字數 719 閱讀 8126

我是個有**「潔癖」的人,不願意與警告為伍,哪怕是只有乙個,也會讓我渾身上下都不舒服。在一次整改乙個嵌入式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標...