我的代码在
下面1 #include <stdio.h>
2 int main(void)
3 {
4 union test1 {
5 int a;
6 };
7
8 union test1 {
9 int a;
10 };
11
12 return 0;
13 }
编译错误:
4.c: In function ‘main’:
4.c:8:15: error: redefinition of ‘union test1’
union test1 {
^
4.c:4:15: note: originally defined here
union test1 {
^
我的问题是
Q1:
错误信息说重新定义,
在我看来,下面的代码应该是声明
为什么要重新定义?
为什么不重新声明?
4 union test1 {
5 int a;
6 };
Q2:
根据c11标准
6.7.2.3标签特定类型的内容最多应定义一次。
最多一次===&gt;&gt;&gt;我的代码有两次,所以发生了错误。 “特定类型” 下面是代码包类型?
union test1 {
int a;
};
答案 0 :(得分:0)
您已正确理解定义和声明。请参阅问题What is the difference between a definition and a declaration?的答案。您会看到union test1;
是一个声明,但union test1 {int a;};
是一个定义。
此外,您在函数内定义了union。这不是一个好主意。所以,你很可能想要这样做:
#include <stdio.h>
union test1 {
int a;
};
int main(void)
{
return 0;
}
......或者这个:
#include <stdio.h>
int main(void)
{
union {
int a;
} test1;
union {
int a;
} test2;
return 0;
}
如果你真的想要两个声明(和一个定义),你可以这样做:
#include <stdio.h>
union test1;
union test1;
union test1 {
int a;
};
int main(void)
{
return 0;
}