Deutsch   English   Français   Italiano  
<vrelvn$12ddq$1@dont-email.me>

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

Path: ...!eternal-september.org!feeder3.eternal-september.org!news.eternal-september.org!eternal-september.org!.POSTED!not-for-mail
From: David Brown <david.brown@hesbynett.no>
Newsgroups: comp.lang.c
Subject: Re: int a = a (Was: Bart's Language)
Date: Wed, 19 Mar 2025 15:56:55 +0100
Organization: A noiseless patient Spider
Lines: 43
Message-ID: <vrelvn$12ddq$1@dont-email.me>
References: <vracit$178ka$1@dont-email.me> <vrc2d5$1jjrf$1@paganini.bofh.team>
 <vrc4eb$2p28t$1@dont-email.me> <vrc75b$2r4lt$1@dont-email.me>
 <vrccjb$b3m6$1@news.xmission.com> <vrcef2$33076$1@dont-email.me>
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8; format=flowed
Content-Transfer-Encoding: 7bit
Injection-Date: Wed, 19 Mar 2025 15:57:05 +0100 (CET)
Injection-Info: dont-email.me; posting-host="ea1b0970b8bf0b1e1c0e9bf265f385ce";
	logging-data="1127866"; mail-complaints-to="abuse@eternal-september.org";	posting-account="U2FsdGVkX1+xKWBnxvaOaj5i1ltPBCzwAM14+dYA75o="
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101
 Thunderbird/102.11.0
Cancel-Lock: sha1:kxwDoDZ62dyB6BKyywMQx3ptg9E=
Content-Language: en-GB
In-Reply-To: <vrcef2$33076$1@dont-email.me>
Bytes: 3241

On 18/03/2025 19:36, Janis Papanagnou wrote:
> On 18.03.2025 19:04, Kenny McCormack wrote:
>> In article <vrc75b$2r4lt$1@dont-email.me>,
>> David Brown  <david.brown@hesbynett.no> wrote:
>> ...
>>>> gcc won't warn until you say '-Wextra', and then only for:
>>>>
>>>>     int a = a + 1;
>>>
>>> People would not normally write "int a = a;".  It is used as a common
>>> idiom meaning "I know it is not clear to the compiler that the variable
>>> is always initialised before use, but /I/ know it is - so disable the
>>> use-without-initialisation warnings for this variable".
> 
> Wow! - It would never have occurred to me that "int a = a;" being
> considered an idiom, let alone a "common idiom".
> 

It is certainly an idiom, and certainly viewed by gcc as a way to avoid 
an "uninitialized" warning (unless "-Winit-self" is also enabled), and 
it is an idiom I have seen documented in at least one other compiler 
(though I can't remember which - I've read many compiler manuals over 
the decades).

But judging from the posts here, it may not be a "common" idiom.

(And I am not suggesting it is a /good/ idiom.  It's not one I use 
myself, and I have "-Winit-self" in my list of standard warning flags 
because it is conceivable that I write "int a = a;" in error.  But there 
are lots of idioms and common practices in C that I don't like personally.)


As far as I understand it (and I hope to be corrected if I am wrong), 
"int a = a;" is not undefined behaviour as long as the implementation 
does not have trap values for "int".  It simply leaves "a" as an 
unspecified value - just like "int a;" does.  Thus it is not in any way 
"worse" than "int a;" as far as C semantics are concerned.  Any 
difference is a matter of implementation - and the usual implementation 
effect is to disable "not initialised" warnings.

It is in much the same category as "(void) x;", which is an idiom for 
skipping an "unused variable" or "unused parameter" warning.