C語言宏參數的字符串化和宏參數的連接

原文鏈接:https://blog.csdn.net/C1664510416/article/details/80876780

在宏定義中,有時還會用到###兩個符號,它們能夠對宏參數進行操作。

# 的用法

#用來將宏參數轉換爲字符串,也就是在宏參數的開頭和末尾添加引號。例如有如下宏定義:

#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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章