Due to operator precedence rules the condition is interpreted as fd=(fopen(fileName,"r") == NULL)
. The result of ==
is integer, fd
is a pointer, thus the error message.
Consider the “extended” version of your code:
FILE *fd;
int ok;
fd = fopen(fileName, "r");
ok = fd == NULL;
// ...
Would you expect the last line to be interpreted as (ok = fd) == NULL
, or ok = (fd == NULL)
?