在宏定義中,有時還會用到#
和##
兩個符號,它們能夠對宏參數進行操作。
# 的用法
#
用來將宏參數轉換爲字符串,也就是在宏參數的開頭和末尾添加引號。例如有如下宏定義:
#define STR(s) #s
那麼:
printf("%s", STR(c.biancheng.net));
printf("%s", STR("c.biancheng.net"));
分別被展開爲:
printf("%s", "c.biancheng.net");
printf("%s", "\"c.biancheng.net\"");
可以發現,即使給宏參數“傳遞”的數據中包含引號,使用#
仍然會在兩頭添加新的引號,而原來的引號會被轉義。
將上面的例子補充完整:
#include <stdio.h>
#define STR(s) #s
int main() {
printf("%s\n", STR(c.biancheng.net));
printf("%s\n", STR("c.biancheng.net"));
return 0;
}
運行結果:
c.biancheng.net
"c.biancheng.net"
##的用法
##
稱爲連接符,用來將宏參數或其他的串連接起來。例如有如下的宏定義:
#define CON1(a, b) a##e##b
#define CON2(a, b) a##b##00
那麼:
printf("%f\n", CON1(8.5, 2));
printf("%d\n", CON2(12, 34));
將被展開爲:
printf("%f\n", 8.5e2);
printf("%d\n", 123400);
將上面的例子補充完整:
#include <stdio.h>
#define CON1(a, b) a##e##b
#define CON2(a, b) a##b##00
int main() {
printf("%f\n", CON1(8.5, 2));
printf("%d\n", CON2(12, 34));
return 0;
}
運行結果:
850.000000
123400