if (fgets(...))
がわかりやすいなら、同じ理屈で
if (!(fp = fopen(...)))
も分りやすいことになるね。