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,450 of 243,242   
   Tim Rentsch to James Kuyper   
   Re: Undefined behaviour in C23   
   15 Dec 25 07:52:55   
   
   From: tr.17687@z991.linuxsc.com   
      
   James Kuyper  writes:   
      
   > David Brown  writes:   
   >   
   >> On 23/08/2025 00:11, Keith Thompson wrote:   
   >   
   > ...   
   >   
   >>> David Brown  writes:   
   >>>   
   >>>> On 21/08/2025 21:53, Keith Thompson wrote:   
   >>>   
   >>> [...]   
   >>>   
   >>>> If you declare and call a function "foo" that is written in fully   
   >>>> portable C code, but not part of the current translation unit being   
   >>>> compiled (perhaps it has been separately compiled or included in a   
   >>>> library), then it would be UB by the section 4 definition (since   
   >>>> the C standards don't say anything about what "foo" does, nor does   
   >>>> your code).   
   >   
   > ...   
   >   
   >> The C standard does not define how this linking or combing is done -   
   >> it only covers certain specific aspects of the linking that relate   
   >> directly to C.  The behaviour of the function "foo" here is not   
   >> defined in the C standards, and if the source code is not available   
   >> when translating a different translation unit, the behaviour of "foo"   
   >> is undefined.   
   >   
   > I remember having an immensely frustrating discussion on this issue a   
   > couple of decades ago.   
   > If foo was written in fully portable C code, then that C code enables   
   > the C standard to define what the behavior of that code is.  If you   
   > lose your last copy of the source code, you cannot confirm what that   
   > defined behavior should be, but the behavior remains defined by the   
   > code that has since gone missing.   
   > The absence of that source code will make it hard to determine whether   
   > the module can be safely linked to other modules, or to determine what   
   > the defined behavior of the linked program should be - but if the   
   > missing code said the right things to give the combined program   
   > defined behavior, the implementation is still required to generate   
   > that behavior.  Not being able to determine what the standard-defined   
   > behavior of a program should be, is for practical purposes precisely   
   > as useless as if the behavior were undefined - but that doesn't make   
   > the behavior undefined.  [...]   
      
   Right.  The key point is that not knowing what behavior will occur   
   doesn't change whether the behavior is defined.   
      
   Minor point: it is not implementations that generate behavior.  Per   
   section 1, paragraph 2, second item, programs are invoked for use by   
   a data-processing system, which is not part of the implementation.   
   But the important point remains, that definedness doesn't depend on   
   whether we know what behavior to expect.   
      
   --- 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