(使用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'
为什么不记得filePointer
是FILE*
?
答案 0 :(得分:3)
这是一个声明:
FILE *filePointer = fopen("file.txt","wb");
这也是一个宣言:
FILE *filePointer;
然而,这是一个声明。
filePointer = fopen("file.txt","wb");
声明声明变量,可以出现在顶层(声明一个全局变量),或出现在一个函数内(声明一个局部变量)。另一方面,语句只能出现在函数中,并且可以访问本地或全局变量。只有声明可以出现在函数之外,所以如果你在那里放一个语句,编译器会尝试将它作为一个声明,并且通常会给你一个令人困惑的错误信息,告诉你一个声明出错的地方,就像你引用的声明一样。 / p>