C代码在linux上编译得很好,但在Visual Studio中不起作用

时间:2014-06-30 18:20:13

标签: c linux visual-studio

我有一个简单的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>

有什么建议吗?

2 个答案:

答案 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 */