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

FILE *fd; if (fd=fopen(fileName,"r") == NULL) { printf("File failed to open"); exit(1); } 

这是一段代码片段。 当我用gcc编译它时,我得到以下警告: –

 warning: assignment makes pointer from integer without a cast 

当我把fd = fopen(argv [2],“r”)放在括号内时,问题就解决了。

当没有放置括号时,我无法理解将整数转换为指针的位置。

由于运算符优先级规则,条件被解释为fd=(fopen(fileName,"r") == NULL)==的结果是整数, fd是指针,因此是错误消息。

考虑代码的“扩展”版本:

 FILE *fd; int ok; fd = fopen(fileName, "r"); ok = fd == NULL; // ... 

您希望最后一行被解释为(ok = fd) == NULL ,还是ok = (fd == NULL)

等于运算符的优先级高于赋值运算符。 只需将您的代码更改为:

 FILE *fd; if ((fd=fopen(fileName,"r")) == NULL) { printf("File failed to open"); exit(1); } 

你需要围绕作业括号:

 if ((fd=fopen(fileName,"r")) == NULL) .... 

==具有比=更高的优先级,因此它将fopen()的结果与NULL进行比较,然后将其分配给fd

==的优先级高于=。

你做了以下哪些事情?

 #include  

如果没有这个,编译器会假定所有函数都返回一个int