2017年1月9日 星期一

[C] macro 的 # 和 ##

常常會忘記用法,雖然也不太用就是了啦.....

一個#:

其中一個用法是把後面接的東西換成一個字串
舉例來說:
#define print(n) printf(#n " = %d\n", n);
會被換成
print(x/y) = printf("x/y" " = %d\n", x/y);

上面的n換成x/y,但是#n就會換成"x/y"

兩個#:

它叫做"token pasting",所以就是把東西貼在一起囉!
舉例來說:
#define MAX(type)                           \     <-----一定要打,因為preprocessor正常是要打成一行
type type##_max(type x, type y) {    \
     return x > y ? x : y;                       \
}  

如果是MAX(int) 就會被擴展成
int int_max(int x, int y) {
     return x > y ? x : y;
}

為什麼要有這個功能呢?
以上面的code來說
直接打type_max不會轉成int_max,因為他會把type_max看成一個字串,所以要跟他講type是我要你改的東西,再和後面的_max連起來


沒有留言:

張貼留言