Sujet : Re: int a = a (Was: Bart's Language)
De : david.brown (at) *nospam* hesbynett.no (David Brown)
Groupes : comp.lang.cDate : 19. Mar 2025, 15:56:55
Autres entêtes
Organisation : A noiseless patient Spider
Message-ID : <vrelvn$12ddq$1@dont-email.me>
References : 1 2 3 4 5 6
User-Agent : Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101 Thunderbird/102.11.0
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.