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


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

# 的用法

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

#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\"");

可以發現,即使給宏參數“傳遞”的數據中包含引號,使用#仍然會在兩頭添加新的引號,而原來的引號會被轉義。

將上面的例子補充完整:

  1. #include <stdio.h>
  2. #define STR(s) #s
  3. int main() {
  4. printf("%s\n", STR(c.biancheng.net));
  5. printf("%s\n", STR("c.biancheng.net"));
  6. return 0;
  7. }

運行結果:
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);

將上面的例子補充完整:

  1. #include <stdio.h>
  2. #define CON1(a, b) a##e##b
  3. #define CON2(a, b) a##b##00
  4. int main() {
  5. printf("%f\n", CON1(8.5, 2));
  6. printf("%d\n", CON2(12, 34));
  7. return 0;
  8. }

運行結果:
850.000000
123400


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM