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

Jor*_*dan 3 c visual-studio-2010

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

#include <stdio.h>
#include <string.h>

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);
}
Run Code Online (Sandbox Code Playgroud)

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

#include <stdio.h>
#include <string.h>


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);

}
Run Code Online (Sandbox Code Playgroud)

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

谢谢

Mys*_*ial 8

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";
Run Code Online (Sandbox Code Playgroud)