有谁知道为什么此代码变体在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可以正常工作。
答案 0 :(得分:2)
Visual Studio 2010支持旧版本的C,即C89或ANSI C.
在C89中,必须在块的开头声明变量。与较新版本的C不同,它不支持混合声明。因此,您必须在{
之后声明变量。
GCC支持混合声明为an extension,这解释了为什么代码在GCC中编译没有任何问题。