为什么这段代码不能编译?

任何人都可以解释为什么这个代码编译:

#include  #include  int main (int argc, char *argv []) { FILE *ptr; char string[10] = "Testing"; ptr = fopen("C:\\Users\\Jordan\\Desktop\\Hello.txt", "wb"); fwrite(string,sizeof(string[0]), sizeof(string)/sizeof(string[0]), ptr); } 

然而,这不是:给出错误C2065:’string’:未声明的标识符

 #include  #include  int main (int argc, char *argv []) { FILE *ptr; ptr = fopen("C:\\Users\\Jordan\\Desktop\\Hello.txt", "wb"); char string[10] = "Testing"; fwrite(string,sizeof(string[0]), sizeof(string)/sizeof(string[0]), ptr); } 

我在Windows 7计算机上使用Visual Studio 2010。

谢谢

Visual Studio使用旧的C89 / 90 C.在较旧的C版本中,您不能混合声明和代码。

您的所有声明都必须排在最前面。 这就是第二个例子无法编译的原因。

 // This a declaration FILE *ptr; // This is code ptr = fopen("C:\\Users\\Jordan\\Desktop\\Hello.txt", "wb"); // This is another declaration. Not Allowed in C89/C90!!! char string[10] = "Testing"; 

在(C89版本)C中,所有变量必须在块的顶部声明(在本例中为函数)。 在你的第一个例子中,你正在这样做,在你的第二个例子中,你不是。

如果您使用.c扩展名保存此文件,则编译器会将其解释为C源文件,并且由于C ++的VC ++支持适用于C89,因此适用于变量声明的C89规则; 特别是,在C89中,您必须在其块的开头声明所有局部变量。