宏定义##除了粘合,还有避免重定义的功能??为啥子??
实验代码的时候突然发现的,按照我的理解,x##n应该就是等价于xn的,为什么我第一张图里面的代码,却被说成重定义,不让我通过,而x##n就可以通过?
书上也有介绍了一下重定义常量的概念,可是感觉和我这个代码的重定义,有点区别。另外书上针对##也只讲了他作为粘合剂的用法,其他没有说……
$ 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;
}
$
人造人 发表于 2018-9-20 13:03
天哪 $和# 1什么的是啥??别的编译器上的东西吗?看不懂QAQ我万年VS党
页:
[1]