[1] (int *)x和(int *(const int))x不在同一层namespace,编译通过.
链接时出错.(int *)x将(int *(const int))x覆盖,所以在c行时会找不到匹配的函数名
Code
1 int x(const int int_a) {return int_a;} //a
2
3 struct x
4 {
5 int x;
6 };
7
8 //#define x(x) x
9
10 int main(int argc, char *argv[])
11 {
12 int *x = calloc(1, sizeof x); //b
13
14 x: (((struct x *)x)->x) = x(5); //c
15
16 printf("%p\n", ((struct x *)x)->x);
17
18 return 0;
19
[2] 编译通过
Code
1 int x(const int int_a) {return int_a;}
2
3 struct x
4 {
5 int x;
6 };
7
8 //#define x(x) x
9
10 int main(int argc, char *argv[])
11 {
12 int *x = calloc(1, sizeof x);
13
14 //x: (((struct x *)x)->x) = x(5);
15
16 //printf("%p\n", ((struct x *)x)->x);
17
18 return 0;
19 }
20
[3] 编译出错.(int *)x和(int *(const int))x在同一层namespace,冲突.
1 int x(const int int_a) {return int_a;}
2
3 int *x;
4
5 int main(int argc, char *argv[])
6 {
7 return 0;
8 }
9
责任编辑:cyth