Sujet : Re: Struct Error
De : jameskuyper (at) *nospam* alumni.caltech.edu (James Kuyper)
Groupes : comp.lang.cDate : 25. Jan 2025, 02:53:41
Autres entêtes
Organisation : A noiseless patient Spider
Message-ID : <vn1g75$2g0m7$2@dont-email.me>
References : 1 2 3 4 5 6 7
User-Agent : Mozilla Thunderbird
On 1/24/25 15:31, Kaz Kylheku wrote:
On 2025-01-24, David Brown <david.brown@hesbynett.no> wrote:
...
This is one of these cases where the C language /could/ have been
defined to allow incomplete types to be used. But the language
definition (the standards) does not allow it.
It does; the implementation can issue a required diagnostic,
and keep chugging along. The behavior becomes undefined, but
the same implementation can provide its own definition:
like such that when the type is completed by the time it
matters, it's all good.
In that sense, the only thing that the C standard does disallow is
translation of a correctly formatted #error directive that survives
conditional compilation (an incorrectly formatted directive would give
the implementation permission to translate it).
In more conventional usage, the C standard is said to allow something
only when its behavior is no worse than "unspecified". If the behavior
is undefined, the standard imposes no requirements, in which case the
implementation is permitted to give your translated code any arbitrary
behavior it is able to give it.
That only makes sense if you don't care what your program does - and if
that is the case, there's no reason to bother writing a new program -
just execute an arbitrary existing program. Whatever the behavior of
that arbitrary existing program is, it is behavior that would be
permitted for the translation of your program.