FILE *fd;
if (fd=fopen(fileName,"r") == NULL)
{
printf("File failed to open");
exit(1);
}
Run Code Online (Sandbox Code Playgroud)
这是一段代码片段.当我用gcc编译它时,我得到以下警告: -
warning: assignment makes pointer from integer without a cast
Run Code Online (Sandbox Code Playgroud)
当我把fd = fopen(argv [2],"r")放在括号内时,问题就解决了.
当没有放置括号时,我无法理解将整数转换为指针的位置.
Dav*_*itt 14
由于运算符优先级规则,条件被解释为fd=(fopen(fileName,"r") == NULL).结果==是整数,fd是一个指针,因此是错误信息.
考虑代码的"扩展"版本:
FILE *fd;
int ok;
fd = fopen(fileName, "r");
ok = fd == NULL;
// ...
Run Code Online (Sandbox Code Playgroud)
你期望最后一行被解释为(ok = fd) == NULL,或ok = (fd == NULL)?