Deutsch English Français Italiano |
<va727r$d1jq$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!.POSTED!not-for-mail From: Bart <bc@freeuk.com> Newsgroups: comp.lang.c Subject: Re: on allowing "int a" definition everywhere Date: Thu, 22 Aug 2024 11:00:28 +0100 Organization: A noiseless patient Spider Lines: 76 Message-ID: <va727r$d1jq$1@dont-email.me> References: <afdfe7c37c6ad739fd82c7ec0587b82e0963fce2@i2pn2.org> <va2i90$3f4dg$1@dont-email.me> <pan$8a32c$1fb86219$8ea0c6ae$7c2d1765@invalid.invalid> <va4id0$3rc3n$1@dont-email.me> <pan$2be2c$5ea44d54$282eec3$b0bcf030@invalid.invalid> MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit Injection-Date: Thu, 22 Aug 2024 12:00:28 +0200 (CEST) Injection-Info: dont-email.me; posting-host="546f7a36e4e459fbaf8d49cd6ca25442"; logging-data="427642"; mail-complaints-to="abuse@eternal-september.org"; posting-account="U2FsdGVkX1/Yrvo7N31YGdujFEy5/OSE" User-Agent: Mozilla Thunderbird Cancel-Lock: sha1:tQUDCVOHw7IRuIuYbQVeR6TNHfY= In-Reply-To: <pan$2be2c$5ea44d54$282eec3$b0bcf030@invalid.invalid> Content-Language: en-GB Bytes: 3221 On 22/08/2024 09:40, Blue-Maned_Hawk wrote: > 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, …); > I wonder, if I laid it out it properly: for (bool x = true; x; x = false) for (FILE * f = fopen("file.txt", "r"); x; x = false) if (…) { /* … */ fclose(f); } fwrite(f, …); Nope; I still haven't the faintest idea what this is supposed to do. I suspect that it doesn't actually run or need those two nested loops. I assume the (...) tests the value of 'f'? If so then perhaps this is a shorter way of expressing the same thing: { FILE * f = fopen("file.txt", "r"); if (f) { /* … */ fclose(f); } } fwrite(f, …);