在C++中自界說宏的簡略辦法。本站提示廣大學習愛好者:(在C++中自界說宏的簡略辦法)文章只能為提供參考,不一定能成為您想要的結果。以下是在C++中自界說宏的簡略辦法正文
可使用宏界說沒有前往值的“函數”。例如:
#define PrintMax(a, b) \ do \ { \ int x = a, y = b; \ printf("Max: %d\n", x > y ? x : y);\ } while (0) // ... PrintMax(3, 4);
如許的“函數”與真正意義上的函數有實質的差別,由於宏是一個編譯前行動,僅僅是編譯前對文本停止調換。在Python源碼中,常常可以看到上面相似的宏界說:
#define foo(x) \ do { \ ... \ } while (0)
為何要應用do { ... } while (0)如許的語法而不直接應用 { } 呢?界說了下面這個宏,我們便可以在代碼中應用相似如許的代碼:foo(3); 留意開頭的分號,它看起來很像一個函數,完成上它表現一條語句。假如應用 { } 來取代 do { ... } while (0),那末應用分號明顯是個語法毛病。
應用宏時,有幾點要特殊留意:
要特殊留意空格。上面的兩個宏是一樣的:
#define foo(x) (x << 2) #define boo (x) (x << 2) //留意括號後面的空格
用宏給類型取別號與typedef有很年夜的差別。例如:
#define INT int * INT p1, p2; // p1是指針,p2是一個int變量 typedef int * INT; INT p1, p2; // p1, p2都為指針 //--------------------------------------------------- #define LONG long unsigned LONG v1; // v1是一個無符號的long變量 typedef long LONG; unsigned LONG v1; // 毛病哦~~~