鱼C论坛

 找回密码
 立即注册
查看: 2508|回复: 2

宏定义##除了粘合,还有避免重定义的功能??为啥子??

[复制链接]
发表于 2018-9-20 10:24:29 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
QQ图片20180920101911.png QQ图片20180920101904.png


实验代码的时候突然发现的,按照我的理解,x##n应该就是等价于xn的,为什么我第一张图里面的代码,却被说成重定义,不让我通过,而x##n就可以通过?
书上也有介绍了一下重定义常量的概念,可是感觉和我这个代码的重定义,有点区别。另外书上针对##也只讲了他作为粘合剂的用法,其他没有说……
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2018-9-20 13:03:49 | 显示全部楼层
  1. $ ls
  2. main.c
  3. $ cat main.c
  4. #define XNAME(n) xn

  5. int main(void)
  6. {
  7.         int XNAME(1) = 12;
  8.         int XNAME(2) = 15;
  9.         return 0;
  10. }

  11. $ gcc -E main.c
  12. # 1 "main.c"
  13. # 1 "<built-in>"
  14. # 1 "<command-line>"
  15. # 31 "<command-line>"
  16. # 1 "/usr/include/stdc-predef.h" 1 3 4
  17. # 32 "<command-line>" 2
  18. # 1 "main.c"


  19. int main(void)
  20. {
  21. int xn = 12;
  22. int xn = 15;
  23. return 0;
  24. }
  25. $ vim main.c
  26. $ cat main.c
  27. #define XNAME(n) x#n

  28. int main(void)
  29. {
  30.         int XNAME(1) = 12;
  31.         int XNAME(2) = 15;
  32.         return 0;
  33. }

  34. $ gcc -E main.c
  35. # 1 "main.c"
  36. # 1 "<built-in>"
  37. # 1 "<command-line>"
  38. # 31 "<command-line>"
  39. # 1 "/usr/include/stdc-predef.h" 1 3 4
  40. # 32 "<command-line>" 2
  41. # 1 "main.c"


  42. int main(void)
  43. {
  44. int x "1" = 12;
  45. int x "2" = 15;
  46. return 0;
  47. }
  48. $ vim main.c
  49. $ cat main.c
  50. #define XNAME(n) x##n

  51. int main(void)
  52. {
  53.         int XNAME(1) = 12;
  54.         int XNAME(2) = 15;
  55.         return 0;
  56. }

  57. $ gcc -E main.c
  58. # 1 "main.c"
  59. # 1 "<built-in>"
  60. # 1 "<command-line>"
  61. # 31 "<command-line>"
  62. # 1 "/usr/include/stdc-predef.h" 1 3 4
  63. # 32 "<command-line>" 2
  64. # 1 "main.c"


  65. int main(void)
  66. {
  67. int x1 = 12;
  68. int x2 = 15;
  69. return 0;
  70. }
  71. $

复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-9-20 13:30:54 | 显示全部楼层

天哪 $和# 1  什么的是啥??别的编译器上的东西吗?看不懂QAQ我万年VS党
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-6-10 09:48

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表