亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

關于C++宏定義避免多次包含的問題

關于C++宏定義避免多次包含的問題

呼啦一陣風 2019-04-07 09:38:20
看到在好多cpp文件中,都有下面這樣的寫法#ifndefLIB_XXX_XXX#defineLIB_XXX_XXX...一大段代碼...#endif請問這么宏定義的具體作用?
查看完整描述

2 回答

?
眼眸繁星

TA貢獻1873條經驗 獲得超9個贊

《c++primer》一書2.9.2節:在編寫頭文件之前,我們需要引入一些額外的預處理器設施。預處理器允許我們自定義變量。預處理器變量的名字在程序中必須是唯一的。任何與預處理器變量相匹配的名字的使用都關聯到該預處理器變量。為了避免名字沖突,預處理器變量經常用全大寫字母表示。預處理器變量有兩種狀態:已定義或未定義。定義預處理器變量和檢測其狀態所用的預處理器指示不同。#define指示接受一個名字并定義該名字為預處理器變量。#ifndef指示檢測指定的預處理器變量是否未定義。如果預處理器變量未定義,那么跟在其后的所有指示都被處理,直到出現#endif??梢允褂眠@些設施來預防多次包含同一頭文件:#ifndefSALESITEM_H
#defineSALESITEM_H
//DefinitionofSales_itemclassandrelatedfunctionsgoeshere
#endif條件指示#ifndefSALESITEM_H測試SALESITEM_H預處理器變量是否未定義。如果SALESITEM_H未定義,那么#ifndef測試成功,跟在#ifndef后面的所有行都被執行,直到發現#endif。相反,如果SALESITEM_H已定義,那么#ifndef指示測試為假,該指示和#endif指示間的代碼都被忽略。為了保證頭文件在給定的源文件中只處理過一次,我們首先檢測#ifndef。第一次處理頭文件時,測試會成功,因為SALESITEM_H還未定義。下一條語句定義了SALESITEM_H。那樣的話,如果我們編譯的文件恰好又一次包含了該頭文件。#ifndef指示會發現SALESITEM_H已經定義,并且忽略該頭文件的剩余部分。
                            
查看完整回答
反對 回復 2019-04-07
?
倚天杖

TA貢獻1828條經驗 獲得超3個贊

首先,這些宏定義不是在cpp文件中,而是在頭文件中的。
我們知道,頭文件一般是用來聲明的,會被其他的源文件和頭文件include,當被多個文件include的時候就會造成重復聲明。
為了使得只聲明一次,引入問題中所說的宏定義,一般以文件名大寫和_來當宏的名字。
                            
查看完整回答
反對 回復 2019-04-07
  • 2 回答
  • 0 關注
  • 1043 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號