home bbs files messages ]

Forums before death by AOL, social media and spammers... "We can't have nice things"

   comp.lang.c      Meh, in C you gotta define EVERYTHING      243,242 messages   

[   << oldest   |   < older   |   list   |   newer >   |   newest >>   ]

   Message 242,869 of 243,242   
   Tim Rentsch to Keith Thompson   
   Re: _BitInt(N)   
   07 Jan 26 03:01:31   
   
   From: tr.17687@z991.linuxsc.com   
      
   Keith Thompson  writes:   
      
   > Tim Rentsch  writes:   
   >   
   >> antispam@fricas.org (Waldek Hebisch) writes:   
   >>   
   >>> Tim Rentsch  wrote:   
   >>>   
   >>>> James Kuyper  writes:   
   >   
   > [...]   
   >   
   >>>>> Note: in C2023, the [predefined macro names] section says:  "Any   
   >>>>> other predefined macro names:  shall begin with a leading   
   >>>>> underscore followed by an uppercase letter;  or, a second   
   >>>>> underscore...".  For earlier versions of the standard, user code   
   >>>>> should avoid using such identifiers because they were reserved   
   >>>>> for all purposes, but that's no longer the case.  Now, they   
   >>>>> should be avoided because they may be pre-defined by the   
   >>>>> implementation, which means that any attempt to use them might   
   >>>>> have unpredictable results.   
   >>>>   
   >>>> That's right in the sense that if the implementation is unknown   
   >>>> then unexpected results may occur.  However, if the   
   >>>> implementation is known, then we can find out what results are   
   >>>> expected by consulting the implementation's documentation for   
   >>>> extensions, since any such macro name must qualify as an   
   >>>> extension, and so much be documented.   
   >>>   
   >>> Hmm, looking at '/usr/include/string.h' on my machine I see   
   >>> definitions of things like   
   >>>   
   >>> __GLIBC_INTERNAL_STARTING_HEADER_IMPLEMENTATION   
   >>> __need_size_t   
   >>>   
   >>> and lot of similar things.  I do not recall seeing any user   
   >>> documentation listing them.  Does this mean that gcc+glibc   
   >>> is noncompilant in this aspect?   
   >>   
   >> I think it's reasonable to say that the appearance of a macro   
   >> name being #define'd in a standard header qualifies as   
   >> documenting the name being #define'd.   
   >   
   > I disagree.  I don't think it's reasonable to say that.   
      
   Some people think it's reasonable.  It's okay if you don't.   
      
   > Headers are not documentation.  They're often barely human-readable,   
   > and the system headers aren't necessarily even files.   
      
   Yes, I might have said "standard header file", with the   
   understanding that the files in question are encoded in regular   
   ascii.  There isn't any requirement that the document(s) be easy   
   to read.   
      
   >>                                        As long as the #define is   
   >> readable in an ordinary source file, there isn't any mystery   
   >> about the name being used or what its definition is.   
   >   
   > System headers can be arbitrarily complex, with #includes for other   
   > system-specific headers, nests of #ifs and #ifdefs, and so on.   
      
   As long as they define all implementation-defined characteristics   
   (and I suppose can be understood by humans), how complex they are   
   doesn't matter.  That's a QOI issue, not a conformance issue.   
      
   >>                                                       I suppose   
   >> that to satisfy the letter of the C standard, the accompanying   
   >> document would need to incorporate the system header files by   
   >> reference, but surely the header files satisfy the spirit of   
   >> providing the required documentation.  Implementation-defined   
   >> values for things like CHAR_BIT and INT_MAX fall under the same   
   >> rule for documentation as do extensions, yet as far as I know   
   >> these values are defined only in system header files, and not in   
   >> any separate document.   
   >   
   > gcc's documentation does have a "C Implementation-Defined Behavior"   
   > section.  It doesn't mention CHAR_BIT by name, but it does document   
   > "The number of bits in a byte" as "Determined by ABI".  I didn't   
   > find anything similar for INT_MAX.   
   >   
   > I find it implausible that the standard intended to require   
   > implementations to document all macros defined in standard headers,   
      
   The language in the C standard is clearcut:  "An implementation shall   
   be accompanied by a document that defines all implementation-defined   
   and locale-specified characteristics and all extensions."  If gcc   
   (together with glibc) doesn't provide such a document, that defines   
   ALL implementation-defined characteristics, etc, and system header   
   files don't count, then that implementation is not conforming.  See   
   also my followup to James Kuyper in a closely related sub-thread.   
      
   --- SoupGate-Win32 v1.05   
    * Origin: you cannot sedate... all the things you hate (1:229/2)   

[   << oldest   |   < older   |   list   |   newer >   |   newest >>   ]


(c) 1994,  bbs@darkrealms.ca