#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 }