想必很多人都看過“頭文件中的 #ifndef/#define/#endif 防止該頭文件被重復引用”。但是是否能理解“被重復引用”是什么意思?是不能在不同的兩個文件中使用include來包含這個頭文件嗎?如果頭文件被重復引用了,會產生什么后果?是不是所有的頭文件中都要加入#ifndef/#define/#endif 這些代碼?
其實“被重復引用”是指一個頭文件在同一個cpp文件中被include了多次,這種錯誤常常是由于include嵌套造成的。比如:存在a.h文件#include "c.h"而此時b.cpp文件導入了#include "a.h" 和#include "c.h"此時就會造成c.h重復引用。
頭文件被重復引用引起的后果:
有些頭文件重復引用只是增加了編譯工作的工作量,不會引起太大的問題,僅僅是編譯效率低一些,但是對于大工程而言編譯效率低下那將是一件多么痛苦的事情。
有些頭文件重復包含,會引起錯誤,比如在頭文件中定義了全局變量(雖然這種方式不被推薦,但確實是C規范允許的)這種會引起重復定義。
是不是所有的頭文件中都要加入#ifndef/#define/#endif 這些代碼?
答案:不是一定要加,但是不管怎樣,用ifnde xxx #define xxx#endif或者其他方式避免頭文件重復包含,只有好處沒有壞處。個人覺得培養一個好的編程習慣是學習編程的一個重要分支。
下面給一個#ifndef/#define/#endif的格式:
#ifndef A_H意思是"if not define a.h" 如果不存在a.h
接著的語句應該#define A_H 就引入a.h
最后一句應該寫#endif 否則不需要引入
--------------------------------------------------------------------------------------------------
#ifndef GRAPHICS_H // 防止graphics.h被重復引用
#define GRAPHICS_H
#include
…
#include “header.h” // 引用非標準庫的頭文件
…
void Function1(…); // 全局函數聲明
…
class Box // 類結構聲明
{
…
};
#endif
--------------------------------------------------------------------------------------------------
上一篇:各變量在MCU中的存放位置ram or flash
下一篇:最后一頁
推薦閱讀
史海拾趣
背景:GardTec Inc公司,成立于1987年(也有資料顯示為1985年),自創立之初便確立了成為全球風扇配件產品第一供應商的目標。這一明確的定位為公司后續的發展奠定了堅實的基礎。
發展:在創立初期,GardTec專注于風扇配件的研發與生產,通過技術創新和品質提升,逐漸在行業內嶄露頭角。公司利用現代化的制造和工程設施,不斷突破設計與材料的限制,推出了一系列具有創新性的風扇配件產品。
影響:隨著產品質量的提升和市場份額的擴大,GardTec逐漸在電子行業中建立了良好的口碑,為后續的快速發展奠定了基礎。
在快速發展的過程中,Aromat Corp始終關注社會責任。公司積極參與公益活動,支持教育事業和環保事業。同時,Aromat Corp還注重員工的成長與發展,提供良好的工作環境和福利待遇,激發員工的創新精神和團隊合作精神。這些舉措不僅提升了公司的社會形象,也為公司的可持續發展奠定了堅實的基礎。
這五個故事只是虛構的Aromat Corp公司的發展概況,并不代表任何真實公司的實際情況。每個公司的發展歷程都是獨一無二的,受到市場環境、技術趨勢、管理決策等多種因素的影響。
隨著電子技術的快速發展,教育和培訓成為了Global Specialties的另一個重要領域。公司敏銳地捕捉到這一市場需求,推出了一系列針對教育的試驗板和套件。這些產品不僅幫助學生更好地理解電子原理,還激發了他們的創造力和實踐能力。通過與多所高校和職業院校的合作,Global Specialties成功地將自己的品牌深入到教育市場的每一個角落。
隨著電子技術的快速發展,教育和培訓成為了Global Specialties的另一個重要領域。公司敏銳地捕捉到這一市場需求,推出了一系列針對教育的試驗板和套件。這些產品不僅幫助學生更好地理解電子原理,還激發了他們的創造力和實踐能力。通過與多所高校和職業院校的合作,Global Specialties成功地將自己的品牌深入到教育市場的每一個角落。
隨著智能能源市場的不斷發展,Econais也積極拓展該領域的應用。通過與能源公司的合作,Econais的Wi-Fi模塊被廣泛應用于智能電網、智能家居和分布式能源管理等領域。這些應用不僅提高了能源利用的效率,也為用戶帶來了更加便捷和舒適的體驗。Econais憑借其在超低功耗和高性能無線產品方面的技術優勢,成功在智能能源市場占據了一席之地。
2014年,Econais宣布推出新一代IEEE802.11b/g/n Wi-Fi模塊——EC19D01。這款模塊是物聯網領域的一次重大突破,它采用了系統級封裝(SiP)技術,實現了世界上最小、最容易集成和最低待機功耗的Wi-Fi模塊。EC19D01的推出,進一步鞏固了Econais在超低功耗物聯網微型Wi-Fi模塊領域的領先地位。
基于32位RISC處理器之SoC平臺的Linux操作系統實現 摘要: 本文會介紹如何在兼容ARM V4指令集的32位RISC處理器(FA526)所構建的SoC平臺上(即FIE8100),運用智原科技所提供的FA526-Linux開發包通過 armboot裝載Linux操作系統。使開發人員可以在基于FIE8100 SoC的仿真平臺-MediaCreative!上進行二 ...… 查看全部問答∨ |
|
AnalogicTech offers a complete portfolio of products for smartphones and other handheld equipment to fully optimize available energy, minimize losses, and prolong battery life. For Li-ion polymer batteries, linear ...… 查看全部問答∨ |
|
LED由于環保、壽命長、光電效率高等眾多優點,近年來在各行業應用得以快速發展,LED的驅動電源成了關注熱點,理論上,LED的使用壽命在10萬小時以上,但在實際應用過程中,由于驅動電源的設計及驅動方式選擇不當,使LED極易損壞.隨著LED的應用日益廣泛,LED ...… 查看全部問答∨ |
|
FLASH BLOCK_STATUS_RESERVED 在哪里標記 各位大哥: 我在查看 6410 的 EBOOT 里面都找不到 FLASH BLOCK_STATUS_RESERVED 這些標記在哪里標記 請各位指點一二~! 謝謝… 查看全部問答∨ |
|
我用CAB打包后,出的錯誤Log文件的內容是 “Error: Section [SourceDisksFiles] - file D:\\Program Files\\HelloCE\\HelloCE\\bin\\Debug\\HelloCE.exe cannot have a drive or pathname” 請問是什么原因?謝謝… 查看全部問答∨ |