Sujet : Re: on allowing "int a" definition everywhere
De : bluemanedhawk (at) *nospam* invalid.invalid (Blue-Maned_Hawk)
Groupes : comp.lang.cDate : 22. Aug 2024, 09:40:30
Autres entêtes
Organisation : A noiseless patient Spider
Message-ID : <pan$2be2c$5ea44d54$282eec3$b0bcf030@invalid.invalid>
References : 1 2 3 4
User-Agent : Pan/0.154 (Izium; 517acf4)
Thiago Adams wrote:
On 21/08/2024 01:42, Blue-Maned_Hawk wrote:
Thiago Adams wrote:
initializer inside if is already in C++, and it will probably be on
C2Y.
If it's for consistency with how for loops permit declarations, i would
_much_ prefer that they just outlaw that to induce consistency.
(Really, i'd ideally want things to just stay as they are, since
declarations in for loops are simply too useful for macros.)
I like the ability to declare things inside if.
if (FILE* f = fopen("file.txt", "r"))
{
/*...*/ fclose(f);
}
Because it makes the scope of f, associated with the pointed object
lifetime.
For instance, if you try to use f
if (FILE* f = fopen("file.txt", "r"))
{
/*...*/ fclose(f);
}
fwrite(f, ..) ;// ERROR
You can already do that in C23:
if (…) {
FILE * f = fopen("file.txt", "r");
/* … */
fclose(f);
}
fwrite(f, …); /* Some kind of error happens. */
Or, if you need it to exist before the controlling expression:
for (bool x = true; x; x = false) for (FILE * f = fopen("file.txt", "r");
x; x = false) if (…) {
/* … */
fclose(f);
}
fwrite(f, …);
Therefore, your example does not work as evidence in favor of declarations
in if statement controlling expressions because it's already possible in
other ways.
-- Blue-Maned_Hawk│shortens to Hawk│/blu.mɛin.dʰak/│he/him/his/himself/Mr.blue-maned_hawk.srht.siteBanned in the UK for several years!