c 語言中宏定義和定義全局變量的區別


  1. 宏定義和定義全局變量的區別: 
  2. 1 作用時間不同。 
  3. 宏定義在編譯期間即會使用並替換,而全局變量要到運行時才可以。 
  4. 2 本質類型不同。 
  5. 宏定義的只是一段字符,在編譯的時候被替換到引用的位置。在運行中是沒有宏定義的概念的。而變量在運行時要為其分配內存。 
  6. 3 宏定義不可以被賦值,即其值一旦定義不可修改,而變量在運行過程中可以被修改。 
  7. 宏定義只有在定義所在文件,或引用所在文件的其它文件中使用。 而全局變量可以在工程所有文件中使用,只要再使用前加一個聲明就可以了。換句話說,宏定義不支持extern。 

 

  在C/C++中,宏定義的有效范圍被規定為當前文件內有效。

    “當前文件內有效”分為兩種情況,一種是定義在頭文件中,另一種是定義在源文件中。

    在頭文件中的宏定義隨着頭文件一同被包含到源文件中時,此時宏定義在該源文件中有效,當頭文件中的宏定義隨着該頭文件一起被包含到另一個頭文件中,而這另一個頭文件又被另一個源文件包含,則該宏定義在最終被包含的源文件中同樣有效。

    當宏定義定義在源文件中時,只在當前源文件中有效,即使當前源文件所對應的頭文件被其它源文件包含,由於相應的頭文件中不包含宏定義,其它源文件也不能直接使用該宏定義。(也就相當於文件內的私有成員,只能被文件內的成員使用)。

    當然在該文件中有效的含義是在宏定義語句之后的部分,同一個文件中宏定義語句之前,使用該宏是無效的。

    這就是C語言中宏定義的作用范圍,在C++中無論是類內還是方法內都不建議使用宏定義,可用const成員代替,C++中類內的宏定義和方法中的宏定義都是一樣的,只跟類所在的文件相關,與類相關的概念(如繼承)並沒有什么關系。在定義兩個相同的宏名對應不同的值時,取最新定義的宏名。

    在C++類內或者方法內定義的宏不具有很好的可讀性,寫出來估計會被同事打死的吧。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM