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

  1. Path: sparky!uunet!cis.ohio-state.edu!zaphod.mps.ohio-state.edu!sol.ctr.columbia.edu!ira.uka.de!math.fu-berlin.de!news.netmbx.de!Germany.EU.net!mcsun!sunic!psinntp!psinntp!dg-rtp!sheol!throopw
  2. From: throopw@sheol.UUCP (Wayne Throop)
  3. Newsgroups: comp.lang.c
  4. Subject: meanings of "void" keyword
  5. Message-ID: <721104887@sheol.UUCP>
  6. Date: 07 Nov 92 00:12:30 GMT
  7. References: <2214@sdrc.COM> <Bx8Cw8.5tB@portal.hq.videocart.com> <27264@dog.ee.lbl.gov>
  8. Lines: 51
  9.  
  10. : From: torek@horse.ee.lbl.gov (Chris Torek)
  11. : Newsgroups: comp.lang.c
  12. : [...]  `void' has two meanings in ANSI C:
  13. :         - A void value is a value from the empty set. [...]
  14. :         - A `pointer to (optionally qualified) void', or `void *', is
  15. :           a `generic pointer' type [...]
  16.  
  17. Um.  I thought void had three meanings in ANSI C.  The above two, and 
  18.  
  19.          - A void prototype (eg:   void f(void);         )
  20.            is an explicit declaration that f takes no arguments,
  21.            introduced to a-void the ambiguity with the K&R
  22.            meaning of an empty argument list.
  23.  
  24. In fact, these three uses are essentially independent.   The fact that
  25. (void*) and (void) are both in the type notation and the third is not
  26. make the two seem reasonable and related, but a "better" alternative
  27. would have been to render the three cases:
  28.  
  29.           (void)
  30.           (any*)
  31.           void f(empty);
  32.  
  33. ... because the pointer case isn't really related to the "value drawn
  34. from the empty set" case.  But by that time in the standards process,
  35. introduction of new keywords was something greatly to be avoided, so
  36. the "void" keyword was triply overloaded instead of introducing two
  37. more.
  38.  
  39. ( I'd welcome comment from somebody who actually was part of the
  40.   standards process for C... the above rumor is second or third
  41.   hand. )
  42.  
  43. ( Uh, mind you, the "void prototype" third usage isn't a rumor...
  44.   I mean that the motivation for the triple overloading of void
  45.   is a rumor that I have heard... )
  46.  
  47. BTW: the "any" keyword would have been useful in argument lists
  48. and other places, apart from its use to coin the generic pointer.
  49.  
  50.          void f(int, any, any);
  51.  
  52. could be used instead of
  53.  
  54.          void f(int, ...);
  55.  
  56. to nail down the argument number, but leave the types generic.
  57. (generic by-value argument passing opens up a whole new can of worms,
  58. of course, but I'm sure the notion could be made to work in C.)
  59. --
  60. Wayne Throop  ...!mcnc!dg-rtp!sheol!throopw
  61.