奇特的视觉工作室编译错误

时间:2015-04-20 11:11:44

标签: c visual-studio-2010

有谁知道为什么此代码变体在Visual Studio 2010下编译和运行

#include <stdio.h>

char *myfunc(char *c, int i) {
    c[0] = (char)i;
    c[1] = 0;
    return c;
}

int main(void) {

    char str[5]; //////////////////////////////

    char *(*fun)(char *, int);
    fun = myfunc;



    puts(fun(str, 51));

    getchar();
    return 0;
}

但是这个没有

#include <stdio.h>

char *myfunc(char *c, int i) {
    c[0] = (char)i;
    c[1] = 0;
    return c;
}

int main(void) {



    char *(*fun)(char *, int);
    fun = myfunc;

    char str[5]; //////////////////////////////

    puts(fun(str, 51));

    getchar();
    return 0;
}

第二个变体会返回这些错误

错误C2143:语法错误:缺少&#39;;&#39;之前&#39;键入&#39;
错误C2065:&#39; str&#39; :未声明的标识符

使用mingw gcc可以正常工作。

1 个答案:

答案 0 :(得分:2)

Visual Studio 2010支持旧版本的C,即C89或ANSI C.

在C89中,必须在块的开头声明变量。与较新版本的C不同,它不支持混合声明。因此,您必须在{之后声明变量。

GCC支持混合声明为an extension,这解释了为什么代码在GCC中编译没有任何问题。