在c/c++中,巨集定義的有效範圍被規定為當前檔案內有效。
「當前檔案內有效」分為兩種情況,一種是定義在標頭檔案中,另一種是定義在原始檔中。
1)在標頭檔案中的巨集定義,隨著標頭檔案一同被包含到原始檔中時,此時巨集定義在該原始檔中有效,當頭檔案中的巨集定義隨著該標頭檔案一起被包含到另乙個標頭檔案中,而這另乙個標頭檔案又被另乙個原始檔包含,則該巨集定義在最終被包含的原始檔中同樣有效。
2)當巨集定義定義在原始檔中時,只在當前原始檔中有效,即使當前原始檔所對應的標頭檔案被其它原始檔包含,由於相應的標頭檔案中不包含巨集定義,其它原始檔也不能直接使用該巨集定義。(也就相當於檔案內的私有成員,只能被檔案內的成員使用)。
當然在該檔案中有效的含義是在巨集定義語句之後的部分,同乙個檔案中巨集定義語句之前,使用該巨集是無效的。
這就是c語言中巨集定義的作用範圍,在c++中無論是類內還是方法內都不建議使用巨集定義,可用const成員代替,c++中類內的巨集定義和方法中的巨集定義都是一樣的,只跟類所在的檔案相關,與類相關的概念(如繼承)並沒有什麼關係。在定義兩個相同的巨集名對應不同的值時,取最新定義的巨集名。
在c++類內或者方法內定義的巨集不具有很好的可讀性。
另外如果你想更好的提公升你的程式設計能力,學好c語言c++程式設計!彎道超車,快人一步!筆者這裡或許可以幫到你~
免費學習書籍:
免費學習資料:
C 巨集定義的影響範圍
做專案的時候發現,把頭檔案中的 printf 相關巨集定義去掉以後,裝置照常能夠通過串列埠輸出內容。為此,在 windows 下用vs2010寫了乙個最簡單的helloworld的測試程式。define test lib.h ifndef define test lib h define defin...
C C 巨集定義的可變引數
c c 巨集定義的可變引數 編寫 的過程中,經常會輸出一些除錯資訊到螢幕上,一般會呼叫printf這類的函式。但是當除錯解決之後,我們需要手工將這些地方刪除或者注釋掉。最近在看 linux c程式設計一站式學習 這本書,就想到乙個方法 voidmyprintf char fmt,ifdefdebug...
C C 巨集定義的可變引數
3 10 web開發 dante 16,686 編寫 的過程中,經常會輸出一些除錯資訊到螢幕上,一般會呼叫printf這類的函式。但是當除錯解決之後,我們需要手工將這些地方刪除或者注釋掉。再這次的專案中就用到類似問題,為了除錯程式,再一些地方輸出了很多的資訊,隨著專案的除錯,輸出的資訊越來越多。於是...