C/C++ #define的作用域


#define

#define macro的作用域有點類似於C/C++全局靜態變量

編譯器處理宏的時機是預處理階段 編譯器按文本順序處理 遇到宏時就定義一個宏變量

假設這種情況

void test() {
#define MACRO 1
}

int main() {
#ifdef MACRO
// do some thing
#endif
}
main函數也是看得到MACRO宏的 因為文本順序上test在前
編譯器處理到test時定義了一個宏變量 使得main也能“看見“這個宏

假如把順序交換
int main() {
#ifdef MACRO
// do some thing
#endif
}

void test() {
#define MACRO 1
}
main就看不見MACRO宏了

不同源文件中的宏

不同源文件是看不到互相定義的宏的 除非將宏定義在了頭文件中

宏的機制類似於全局變量 一般情況不會暴露給另一個源文件 除非你特意在頭文件中暴露了它

#a.c
#define CX 1

#b.c
int main() {
#ifdef CX
//不會被執行 因為看不到這個宏
#endif
}

 


免責聲明!

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



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