Deutsch   English   Français   Italiano  
<87wmakaubu.fsf@nosuchdomain.example.com>

View for Bookmarking (what is this?)
Look up another Usenet article

Path: news.eternal-september.org!eternal-september.org!.POSTED!not-for-mail
From: Keith Thompson <Keith.S.Thompson+u@gmail.com>
Newsgroups: comp.lang.c
Subject: Re: do { quit; } else { }
Date: Tue, 13 May 2025 17:51:01 -0700
Organization: None to speak of
Lines: 35
Message-ID: <87wmakaubu.fsf@nosuchdomain.example.com>
References: <vspbjh$8dvd$1@dont-email.me> <vt48go$35hh3$2@dont-email.me>
	<86iknecjz8.fsf@linuxsc.com> <vt4del$3a9sk$1@dont-email.me>
	<86o6x5at05.fsf@linuxsc.com> <vt712u$1m84p$1@dont-email.me>
	<20250409170901.947@kylheku.com> <vt88bk$2rv8r$1@dont-email.me>
	<87wmbs45oa.fsf@nosuchdomain.example.com>
	<vt8hdp$333f0$1@dont-email.me>
	<87semf4pw5.fsf@nosuchdomain.example.com>
	<vt9let$4au3$1@dont-email.me>
	<87zfgn344c.fsf@nosuchdomain.example.com>
	<20250411142636.00006c00@yahoo.com> <20250411102119.431@kylheku.com>
	<20250413204521.0000238e@yahoo.com> <861psuziq2.fsf@linuxsc.com>
	<vvt13g$14otk$1@dont-email.me>
	<87ecwt37b9.fsf@nosuchdomain.example.com>
	<vvv43b$1o3o0$1@dont-email.me> <1000ne2$2323t$1@dont-email.me>
MIME-Version: 1.0
Content-Type: text/plain
Injection-Date: Wed, 14 May 2025 02:51:05 +0200 (CEST)
Injection-Info: dont-email.me; posting-host="28f21fc31a5e376fbb703380c9354ddd";
	logging-data="2244442"; mail-complaints-to="abuse@eternal-september.org";	posting-account="U2FsdGVkX1/gSBGGjJ2FJrsGeqJIhSQv"
User-Agent: Gnus/5.13 (Gnus v5.13)
Cancel-Lock: sha1:tijAgcp88yJXAMvHiC6mNGZPT2Q=
	sha1:l0Km4K8n5JQKBpOTtwUENFRJEzE=

James Kuyper <jameskuyper@alumni.caltech.edu> writes:
> On 5/13/25 05:40, David Brown wrote:
>> On 12/05/2025 22:25, Keith Thompson wrote:
> ...
>>> I think that a lot of C programmers misunderstand what "compatible
>>> types" means. Many seem to think that two types are compatible if
>>> they have the same representation and can be assigned without a cast.
>>
>> Yes. Basically, most C programmers are not particularly aware of the
>> technical definitions of some of the terms in C standards where they
>> differ from common usage. The word "compatible" in English means that
>> the things in question can work together or fit together.
>
> That's pretty much what it means in C. Two C types are compatible in C
> if the C standard *guarantees* that they can work together - that you
> can use the types interchangeably. The tricky part is the definition of
> which pairs of types the C standard makes those guarantees for.
> The key point is that the undefined behavior of code which treats
> incompatible types as if they were compatible could also be that they
> work together, too, depending upon the implementation.

I suggest that the phrase "work together" is too vague.  It's
perfectly reasonable to say that two types that can be assigned to
each other without casts can "work together", and I might even call
them "compatible" if the standard didn't already define the term.

To a first approximation, two types are compatible if they're the
same type.  The standard's section on compatible types points to
additional rules for some cases.  IMHO the English word "compatible"
suggests a much looser relationship, but we're stuck with the
standard's terminology (and I'm not sure what would be better).

-- 
Keith Thompson (The_Other_Keith) Keith.S.Thompson+u@gmail.com
void Void(void) { Void(); } /* The recursive call of the void */