我有一个简单的c程序(它是没有任何GUI的基本程序), 在Linux上这个代码编译和运行没有任何gcc编译器的问题,现在我必须使用Visual Studio 2013在Windows上编译相同的代码,同时使用visual c和intel编译器,我选择了新的控制台应用程序{{3} }
但是收到大量这些错误消息
error : declaration may not appear after executable statement in block myfile.c
在变量声明的所有行上(也在简单的int i;
上)
我使用的唯一库是
#include <stdlib.h>
#include <stdio.h>
#include <time.h>
#include <xmmintrin.h>
#include <math.h>
#include <string.h>
有什么建议吗?
答案 0 :(得分:5)
您的程序似乎有 Mixed Declarations and Code 。 VS不支持混合型声明(或者你可以说它不完全支持C99)。
例如,在混合声明和代码中,您可以执行以下操作:
int i;
...
i++;
int j = i + 2;
每个标识符在声明它的位置都可见,直到封闭块结束。
您需要将所有声明移至开头,就像在C89中一样。您应该注意 VS不是C编译器。
答案 1 :(得分:5)
问题在于如下代码:
void foo()
{
bar(); /* statement */
int i; /* variable declaration */
}
这不是C90有效,因为声明必须在块的开头,就在开头括号({
)之后。
在C99及之后它是正确的,所以GCC接受它,(C90是15岁)。
不幸的是,MS-VC没有,也不会支持C99,所以你的代码不会在那里编译。
您可以手动修复它,将声明移动到块的顶部(1),添加大量的大括号(2),尝试将其编译为C ++,更改编译器...&#39;由你决定!
示例1:
void foo()
{
int i;
bar();
/* beware! if i was initialized, add the initialization here, not there */
}
示例2(隐藏的大括号):
void foo()
{
bar();
{int i;
}} /*all the closing braces should be at the end of the function */