>> > By default I read if (!functioncall()) as 'if the function call >> > failed'. I like the (strcmp(p, q) == 0) idiom because I don't fall >> > into the trap of reading the statement as 'if the string comparison >> > failed'. It is the one case I can think of where I prefer an explicit >> > comparison to zero. >> >> De gustibus non est disputandum. >> >> However, given strcmp is such a special case, I was used to the == 0 >> idiom as well. >> However, the more I used the ! the easier it was to read it. > > No. The idea is that if you are comparing pointers or functions/variables > that obviously return 0 or 1 (like isspace() or bflag or similar) then you > can use !v and v. > > If you are comparing anything else then you should explicitly check > for it. strcmp() has 3 classes of return values < 0, == 0 and > 0. >
Well, in this case, I usually I am only interested if the string is equal or not, so I read !strcmp as if they are equal. I think in this case is only personal taste, but I don't have problems with == 0 idiom.