Deutsch English Français Italiano |
<va4mtb$3rvat$1@dont-email.me> View for Bookmarking (what is this?) Look up another Usenet article |
Path: ...!weretis.net!feeder8.news.weretis.net!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: Wed, 21 Aug 2024 13:34:51 +0100 Organization: A noiseless patient Spider Lines: 63 Message-ID: <va4mtb$3rvat$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> MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit Injection-Date: Wed, 21 Aug 2024 14:34:52 +0200 (CEST) Injection-Info: dont-email.me; posting-host="d1c66e9d4b6a7f2a3b66bfed6622e935"; logging-data="4062557"; mail-complaints-to="abuse@eternal-september.org"; posting-account="U2FsdGVkX188dg4AkgFODid9MPR+OPjz" User-Agent: Mozilla Thunderbird Cancel-Lock: sha1:63Ei9WCdvdSpyzielX0TBcOHWms= Content-Language: en-GB In-Reply-To: <va4id0$3rc3n$1@dont-email.me> Bytes: 2773 On 21/08/2024 12:17, 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 Run-time or compile-time error? It won't be a compile-time error if there is another 'f' visible in that outer scope. And it won't be one here either: if (FILE* f = fopen("file.txt", "r")) { /*...*/ fclose(f); fwrite(f, ..) ;// ERROR } Meanwhile, I'd have a serious problem with the extra clutter this causes. Since you are not reporting an fopen failure, I'd write this as: FILE* f; f = fopen("file.txt", "r"); if (f) { // ... fclose(f); } However I'd be more likely check for failure first. Since I did a recent survery where, on a average, functions only had 3 local variables (in a selection of apps), I've been even more sceptical of block-scoped variables.