鱼C论坛

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

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

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

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

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

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


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

使用道具 举报

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

int main(void)
{
        int XNAME(1) = 12;
        int XNAME(2) = 15;
        return 0;
}

$ gcc -E main.c
# 1 "main.c"
# 1 "<built-in>"
# 1 "<command-line>"
# 31 "<command-line>"
# 1 "/usr/include/stdc-predef.h" 1 3 4
# 32 "<command-line>" 2
# 1 "main.c"


int main(void)
{
 int xn = 12;
 int xn = 15;
 return 0;
}
$ vim main.c
$ cat main.c
#define XNAME(n) x#n

int main(void)
{
        int XNAME(1) = 12;
        int XNAME(2) = 15;
        return 0;
}

$ gcc -E main.c
# 1 "main.c"
# 1 "<built-in>"
# 1 "<command-line>"
# 31 "<command-line>"
# 1 "/usr/include/stdc-predef.h" 1 3 4
# 32 "<command-line>" 2
# 1 "main.c"


int main(void)
{
 int x "1" = 12;
 int x "2" = 15;
 return 0;
}
$ vim main.c
$ cat main.c
#define XNAME(n) x##n

int main(void)
{
        int XNAME(1) = 12;
        int XNAME(2) = 15;
        return 0;
}

$ gcc -E main.c
# 1 "main.c"
# 1 "<built-in>"
# 1 "<command-line>"
# 31 "<command-line>"
# 1 "/usr/include/stdc-predef.h" 1 3 4
# 32 "<command-line>" 2
# 1 "main.c"


int main(void)
{
 int x1 = 12;
 int x2 = 15;
 return 0;
}
$ 
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

天哪 $和# 1  什么的是啥??别的编译器上的东西吗?看不懂QAQ我万年VS党
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-30 10:40

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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