特殊的 visual studio 编译错误
peculiar visual studio compile error
有谁知道为什么这个代码变体在 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;
}
第二种变体returns这些错误
错误 C2143:语法错误:缺少“;”在 'type'
之前
错误 C2065:'str':未声明的标识符
无论哪种方式与 mingw gcc 一起工作都很好。
Visual Studio 2010 支持旧版本的 C,即 C89 或 ANSI C。
在 C89 中,必须在块的开头声明变量。与较新版本的 C 不同,它不支持混合声明。因此,您被迫在 {
.
之后声明变量
GCC 支持混合声明 an extension 这解释了为什么代码在 GCC 中编译没有任何问题。
有谁知道为什么这个代码变体在 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;
}
第二种变体returns这些错误
错误 C2143:语法错误:缺少“;”在 'type'
之前
错误 C2065:'str':未声明的标识符
无论哪种方式与 mingw gcc 一起工作都很好。
Visual Studio 2010 支持旧版本的 C,即 C89 或 ANSI C。
在 C89 中,必须在块的开头声明变量。与较新版本的 C 不同,它不支持混合声明。因此,您被迫在 {
.
GCC 支持混合声明 an extension 这解释了为什么代码在 GCC 中编译没有任何问题。