编译器不识别FILE *变量

时间:2015-03-12 16:19:22

标签: c

(使用Visual Studio 2012 C ++编译器)

以下编辑很好:

FILE *filePointer = fopen("file.txt","wb");

但如果我试着把它分成两行:

FILE *filePointer;
filePointer = fopen("file.txt","wb");

在第二行,编译器不会将filePointer识别为变量。我得到像

这样的错误
Error:  this declaration has no storage class or type specifier

error C2040: 'filePointer' : 'int' differs in levels of indirection from 'FILE *'
error C2440: 'initializing' : cannot convert from 'FILE *' to 'int'

为什么不记得filePointerFILE*

1 个答案:

答案 0 :(得分:3)

这是一个声明:

FILE *filePointer = fopen("file.txt","wb");

这也是一个宣言:

FILE *filePointer;

然而,这是一个声明。

filePointer = fopen("file.txt","wb");

声明声明变量,可以出现在顶层(声明一个全局变量),或出现在一个函数内(声明一个局部变量)。另一方面,语句只能出现在函数中,并且可以访问本地或全局变量。只有声明可以出现在函数之外,所以如果你在那里放一个语句,编译器会尝试将它作为一个声明,并且通常会给你一个令人困惑的错误信息,告诉你一个声明出错的地方,就像你引用的声明一样。 / p>