为什么我在"if(fd = fopen(fileName,"r")== NULL)"中收到此警告?

Abh*_*ogi 5 c file-handling

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)