一、運算符#
示例如下
#include <stdio.h>
#define TO_STRING(s) #s
int main(void)
{
printf(TO_STRING(689754));
printf("\n");
return 0;
}
運行結果如下
該運算符用途就是字符串化。C語言允許在字符串中包含宏參數。例如,如果x是一個宏形參,那麼#x就是轉換為字符串“x”的形參名 。
示例如下:
#include <stdio.h>
#define square(x) printf("The square of " #x " is %d.\n",((x)*(x)))
int main(void)
{
int a = 9;
SQUARE(a);
SQUARE(5 4);
return 0;
}
運行結果如下
這裡需要注意,#運算符是在預處理期間完成的,做了字符串化,而運算不是!
二、運算符##
示例如下
#include <stdio.h>
#define CONNECT_STRING(a,b) (a##b)
int main(void)
{
printf("value=%d\n", CONNECT_STRING(10, 50));
return 0;
}
運行結果如下
該運算符就是用于标識的拼接。一般在批量定義結構體或者函數時,用該運算符會比較省事。
三、注意事項
當宏參數是另一個宏的時候,凡是宏定義裡有用“#”、“##”的地方,宏參數是不會再展開了!!!
示例如下
#include <stdio.h>
#define TO_STRING(s) #s
#define VALUE 100
int main(void)
{
printf(TO_STRING(VALUE));
printf("\n");
return 0;
}
運行結果如下
解決如下
#include <stdio.h>
#define _TO_STRING(s) #s
#define TO_STRING(s) _TO_STRING(s)
#define VALUE 100
int main(void)
{
printf(TO_STRING(VALUE));
printf("\n");
return 0;
}
運行結果如下
其實解決這個問題,就是加了一個中間轉換層,讓所有宏的參數在這裡全部展開。
,更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!