home *** CD-ROM | disk | FTP | other *** search
/ NetNews Usenet Archive 1992 #26 / NN_1992_26.iso / spool / comp / lang / c / 16295 < prev    next >
Encoding:
Internet Message Format  |  1992-11-10  |  1.6 KB

  1. Path: sparky!uunet!mcsun!news.funet.fi!hydra!klaava!wirzeniu
  2. From: wirzeniu@klaava.Helsinki.FI (Lars Wirzenius)
  3. Newsgroups: comp.lang.c
  4. Subject: Re: Hows this for odd
  5. Message-ID: <1992Nov10.223737.13813@klaava.Helsinki.FI>
  6. Date: 10 Nov 92 22:37:37 GMT
  7. References: <1992Nov9.102217.23060@monu6.cc.monash.edu.au> <1992Nov9.231340.10201@ptcburp.ptcbu.oz.au>
  8. Organization: University of Helsinki
  9. Lines: 34
  10.  
  11. michi@ptcburp.ptcbu.oz.au (Michael Henning) writes:
  12. >    if (strncmp(p, "", 1) != 0) {
  13. [...]
  14. >There are lots of gems like that around :-(
  15.  
  16. I'm sure there are, but I don't think this is one of them.  It would
  17. IMHO be much worse to leave the explicit comparison off.  This is
  18. because strcmp and strncmp (and other functions with a similar
  19. interface) do not in fact return a value that is conceptually boolean,
  20. therefore doing a boolean operation on it is bad.  Likewise, since an
  21. equality test does not yield a conceptually boolean value, you should
  22. avoid constructs like:
  23.  
  24.     if ((i==0) + (j==0)) printf("i or j is nonzero\n");
  25.  
  26. If one is not concentrating (like most people reading code do not seem
  27. to be) the statment
  28.  
  29.     if (strcmp(foo, bar)) foobar();
  30.  
  31. looks like it is going to call foobar if foo and bar compare equal,
  32. when in fact the opposite is true.  By making the test explicit,
  33.  
  34.     if (strcmp(foo, bar) != 0) foobar();
  35.  
  36. it becomes clearer that strcmp does not return a boolean value.
  37.  
  38. You are free to disagree about this, of course, and many people
  39. probably do.  It is a completely stylistic issue, and doesn't deserve
  40. a heated discussion.
  41.  
  42. --
  43. Lars.Wirzenius@helsinki.fi  (finger wirzeniu@klaava.helsinki.fi)
  44.    MS-DOS, you can't live with it, you can live without it.
  45.