(Part I:不定變數)
幾個學校課程不太會講到的技巧,第一個是不定變數的使用:
關鍵是
#ifdef DEBUG
#define debug_printf(str, ...) do { printf(str, __VA_ARGS__); } while (0)
#else
#define debug_printf(str, ...)
#endif關鍵是
__VA_ARGS__,這樣可以很愉快的使用 debug_printf()。 (Part II:將傳入的參數變成字串)
另外一個技巧是將傳入的參數變成字串:
關鍵字是
#define print_var(var) do { printf("%s: %s\n", #var, var); } while (0)關鍵字是
#var。當輸入 print_var(argv[0]); 時就會把以上的 Macro 展開為 printf("%s: %s\n", "argv[0]", argv[0]);。 (Part III:將傳入的參數名稱變化)
假設你想要把傳入參數名稱再變化,用
## 穿插其中:#define print_three_var(var)
do {
print_var(var);
print_var(var##2);
print_var(var##3);
} while (0)因為你不能用 var2 來表示 var + "2",所以你必須用
##。當你傳入print_three_var(telephone) 時,他會展開成:print_var(telephone);
print_var(telephone2);
print_var(telephone3);補充一下:這邊的
print_var() 是 Part II 裡的 print_var()。 from:Gea-Suan Lin's BLOG for Work
沒有留言:
張貼留言