keil中include 標頭檔案迴圈引用問題

2021-09-25 07:56:00 字數 1055 閱讀 5816

在標頭檔案中使用#ifdef和#ifndef是非常重要的,可以防止雙重定義的錯誤。

有時候,在b.h中會include   "a.h"  ,在"c.h"中會include   "b.h"及include"a.h", 這時,如果不用ifndef/endif,就會包含兩次a.h,產生錯誤。

還是把頭檔案的內容都放在#ifndef和#endif中吧。不管你的標頭檔案會不會被多個檔案引用,你都要加上這個。一般格式是這樣的:

#ifndef 《標識》 

#define 《標識》

...... 

...... 

#endif

標識的命名規則一般是頭檔名全大寫,前後加下劃線,並把檔名中的「.」也變成下劃線,如:stdio.h 

#ifndef _stdio_h_ 

#define _stdio_h_

#endif 

在#ifndef中定義變數出現的問題(一般不定義在#ifndef中)。

#ifndef aaa

#define aaa

...int i;

...#endif

裡面有乙個變數定義,在vc中鏈結時就出現了重複定義的錯誤,而在c中成功編譯。

標頭檔案被重複引用引起的後果:

有些標頭檔案重複引用只是增加了編譯工作的工作量,不會引起太大的問題,僅僅是編譯效率低一些,但是對於大工程而言編譯效率低下那將是一件多麼痛苦的事情。

有些標頭檔案重複包含,會引起錯誤,比如在標頭檔案中定義了全域性變數(雖然這種方式不被推薦,但確實是c規範允許的)這種會引起重複定義。

是不是所有的標頭檔案中都要加入#ifndef/#define/#endif 這些**?

答案:不是一定要加,但是不管怎樣,用ifnde *** #define ***#endif或者其他方式避免標頭檔案重複包含,只有好處沒有壞處。個人覺得培養乙個好的程式設計習慣是學習程式設計的乙個重要分支。

KEIL 標頭檔案路徑和 include區別

keil 標頭檔案路徑可以直接寫在引號內,預設的話,標頭檔案必須在工程檔案同乙個目錄下,比如 include 此時ds0832.h 檔案必須與工程檔案同一目錄 include d myfile ds0832.h 此時 ds0832.h檔案在d myfile目錄下。還可以寫作 include ds08...

C 中 include標頭檔案

fstream是c stl中對檔案操作的合集,包含了常用的所有檔案操作。在c 中,所有的檔案操作,都是以流 stream 的方式進行的,fstream也就是檔案流file stream。1 插入器 向流輸出資料。比如說開啟了乙個檔案流fout,那麼呼叫fout write to file 2 析取器...

C 中的 標頭檔案」 include「

algorithm意為 演算法 是c 的標準模版庫 stl 中最重要的標頭檔案之一,提供了大量基於 迭代器的非成員模版函式 非修改性序列操作 12個 for each 迴圈 對序列中的每個元素執行某操作 find 查詢 在序列中找出某個值的第一次出現的位置 利用底層元素的等於操作符,對範圍內的元素與...