home *** CD-ROM | disk | FTP | other *** search
/ NetNews Usenet Archive 1992 #18 / NN_1992_18.iso / spool / comp / lang / c / 12499 < prev    next >
Encoding:
Text File  |  1992-08-18  |  4.7 KB  |  100 lines

  1. Newsgroups: comp.lang.c
  2. Path: sparky!uunet!usc!rpi!gatech!concert!sas!mozart.unx.sas.com!sasghm
  3. From: sasghm@theseus.unx.sas.com (Gary Merrill)
  4. Subject: Re: Pointer/address reluctance
  5. Originator: sasghm@theseus.unx.sas.com
  6. Sender: news@unx.sas.com (Noter of Newsworthy Events)
  7. Message-ID: <Bt703H.L3t@unx.sas.com>
  8. Date: Tue, 18 Aug 1992 18:45:16 GMT
  9. References: <l8kteaINNp2c@exodus.Eng.Sun.COM> <1992Aug14.173255.10548@wyvern.twuug.com> <l8ojbqINN900@exodus.Eng.Sun.COM> <Bt53qx.Brp@unx.sas.com> <l92aneINNdqc@exodus.Eng.Sun.COM>
  10. Nntp-Posting-Host: theseus.unx.sas.com
  11. Organization: SAS Institute Inc.
  12. Lines: 86
  13.  
  14.  
  15. In article <l92aneINNdqc@exodus.Eng.Sun.COM>, linden@positive.Eng.Sun.COM (Peter van der Linden) writes:
  16. |> From: sasghm@theseus.unx.sas.com (Gary Merrill)
  17. |> >     An address constant in C begins with an ampersand.
  18. |> 
  19. |> Actually, the above statement is not accurate.  Address constants
  20.  
  21. This was an example and not an attempt at a definition.
  22.  
  23. |> are also created implicitly, with no ampersand, by the use of an
  24. |> expression of array or function type.
  25.  
  26. But you see this very claim would be *incoherent* if addresses and
  27. address constants were the *same thing*.  It is not true, for example,
  28. that *addresses* are created implicitly.
  29.  
  30. On rereading section 3.4 I do have some sympathy for your confusion
  31. since the standard speaks in terms of "address constant" rather
  32. than "address constant expression".  (Compare this to the immediately
  33. preceding paragraph in which "arithmetic constant expression" is
  34. discussed.)  Things would be clearer (and more accurate) at this
  35. point in the standard if the language read "An address constant
  36. expression shall have pointer type"  rather than "An address constant
  37. is a pointer".  I believe I have fallen into the trap myself by using
  38. the phrase "address constant" when "address constant expression" is
  39. the proper locution.
  40.  
  41. |> 
  42. |> Even if the statement were accurate, it does not disprove my point
  43. |> any more than saying that "floating point numbers have a dot".
  44.  
  45. Floating numbers don't have dots -- unless by 'number' you really
  46. mean 'numeral'.  But I think you really must understand the distinction
  47. at this point.  Please note that the standard does not refer to
  48. floating point *numbers* but to floating point *constants*.  (There
  49. is a 'number, floating-point' entry in the index, but I cannot see
  50. where the term is ever used in the text.  The standard is careful
  51. to speak of 'types' and 'constants', but not 'numbers'.  There is
  52. a reason for this.)
  53.  
  54.  
  55. |> We have a certain ASCII notation for convenience, but what we are
  56. |> really talking about is the entity on (abstract if you like)
  57. |> hardware.
  58.  
  59. And what do we use to talk *about* it?  And is what we use to talk
  60. *about* it different what *what we talk about*?
  61.  
  62. |> My point is that it doesn't do much good to try to be more abstract
  63. |> than the ANSI C standard; the ANSI C standard is happy with asides
  64. |> and references to addresses.   You could be too.
  65.  
  66. But you have not shown this about the standard.  And in fact you
  67. can't, because it is not true.  Please cite references in the standard
  68. where it speaks of addresses rather than address constants or address
  69. constant expressions.  The only section that is even remotely confusing
  70. is 3.4 (which started you down the road to ruin).  And even then, there
  71. is no *equivalence* claimed between pointers and address constants.
  72. While one might be inclined to say, on the basis of the pathological
  73. paragraph that "Every address constant is a pointer", it is clear
  74. that the converse ("Every pointer is an address constant") is neither
  75. intended or true.
  76.  
  77. I could not be happy with "asides and references to addresses" (even
  78. if these were in the standard).  I have to figure out how to represent
  79. pointers on existing and future archictures -- and do it in such a
  80. way that the resulting compiler is ANSI conformant.  Requiring me
  81. to implement a pointer as an address would make this task impossible.
  82. This is precisely why ANSI does not dictate the semantics of pointers
  83. in terms of addresses.  You may be satisfied to exclude from
  84. consideration machines with architectures that you believe are "odd",
  85. but the equivalence you wish to impose would prohibit C from being
  86. implemented on some machines (in fact, as I have pointed out in
  87. specific examples, some very real machines in use today).  The
  88. committee was quite concerned during its deliberations to avoid such
  89. a consequence.  The standard is not something compiler writers and
  90. vendors read to get inspiration and hints about implementation. It
  91. is something that demands conformance, and as such has no room for
  92. "asides and references".
  93.  
  94.  
  95.  
  96. -- 
  97. Gary H. Merrill  [Principal Systems Developer, C Compiler Development]
  98. SAS Institute Inc. / SAS Campus Dr. / Cary, NC  27513 / (919) 677-8000
  99. sasghm@theseus.unx.sas.com ... !mcnc!sas!sasghm
  100.