VS下同时使用struct和union出现编译错误


我在VS2008下编译如下C代码

   
  #include <stdio.h>
  

union VARIABLE{
int i;
float f;
} var;

struct S_Type
{
char c;
int i;
double d;
};

int main()
{
var.f = 3.14f;
printf("var.f = %f\n", var.f);

struct S_Type s1;
printf("s1 address 0x%x\n", &s1);
printf("s1.c address 0x%x\n", &s1.c);
printf("s1.i address 0x%x\n", &s1.i);
printf("sizeof s1=%d\n", sizeof(s1));

return 0;
}

在“struct S_Type s1;”处出现错误:
error C2143: 语法错误 : 缺少“;”(在“类型”的前面)。
在注释掉
var.f = 3.14f;
printf("var.f = %f\n", var.f);
编译时正常。为什么给var.f赋值会影响后面S_Type s1的定义呢?

在后面改成:

   
  #include <stdio.h>
  

union VARIABLE{
int i;
float f;
} var;

struct S_Type
{
char c;
int i;
double d;
} s1;

int main()
{
var.f = 3.14f;
printf("var.f = %f\n", var.f);

int i;

return 0;
}

在”int i“这一行依旧提示编译错误:error C2143: 语法错误 : 缺少“;”(在“类型”的前面)。
难道是VS在编译C程序的一个bug?

c windows

天然呆花痴魁 11 years, 11 months ago

这个不是bug,ANSI C就是要求所有的变量都在区域的最前面定义的。虽然到了C99这个限制被取消了,但VS不支持C99。
你可以考虑把扩展名改成cpp按C++编译,如果特殊要求的话。

此ID被屏蔽 answered 11 years, 11 months ago

Your Answer