Deutsch English Français Italiano |
<v2vmto$3ffl2$1@dont-email.me> View for Bookmarking (what is this?) Look up another Usenet article |
Path: ...!feeds.phibee-telecom.net!news.mixmin.net!eternal-september.org!feeder3.eternal-september.org!news.eternal-september.org!.POSTED!not-for-mail From: David Brown <david.brown@hesbynett.no> Newsgroups: comp.lang.c Subject: Re: C23 auto x C++ auto. Date: Sun, 26 May 2024 18:10:32 +0200 Organization: A noiseless patient Spider Lines: 63 Message-ID: <v2vmto$3ffl2$1@dont-email.me> References: <v2vela$3e4pn$1@dont-email.me> <v2vgj3$3eh79$1@raubtier-asyl.eternal-september.org> MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit Injection-Date: Sun, 26 May 2024 18:10:33 +0200 (CEST) Injection-Info: dont-email.me; posting-host="75f63f5864dc091ec43360d736bfcccd"; logging-data="3653282"; mail-complaints-to="abuse@eternal-september.org"; posting-account="U2FsdGVkX1+0F84eNScpy8Q9jzI4Wa4w7ZTKJD1NKJU=" User-Agent: Mozilla Thunderbird Cancel-Lock: sha1:hROb3rItk8m4xlLpLjv3h7fzebE= Content-Language: en-GB In-Reply-To: <v2vgj3$3eh79$1@raubtier-asyl.eternal-september.org> Bytes: 3022 On 26/05/2024 16:22, Bonita Montero wrote: > Am 26.05.2024 um 15:49 schrieb Thiago Adams: >> I think most people is not aware of this: >> >> From 3096 C23 draft >> >> " >> 6.7.9 Type inference >> ... >> 2 For such a declaration that is the definition of an object the >> init- declarator shall have the form >> >> direct-declarator = assignment-expression >> " >> >> Basically "direct-declarator" differs from "declarator" because it >> does not contains pointer. >> >> Then the type inference using auto and pointer is something undefined >> in C23. >> >> struct node{ >> struct node * next; >> >> }; >> int main(){ >> struct node node = {}; >> auto * p = node.next; >> } >> >> <source>:7:4: error: 'auto' requires a plain identifier, possibly with >> attributes, as declarator >> 7 | auto * p = node.next; >> | ^~~~ >> >> This differs from C++. >> >> > > I don't know what type inference in C is good for since the type names > in C are usually short. If I have short typenames in C++ I don't use > type inference. Type-inference makes sense to make such things shorter > typename map<string, string>::const_iterator it = map.cbegin(); > This doesn't happen in C. > "typeof" and "auto" have been available forever as gcc extensions (where "auto" was spelt "__auto_type", since of course "auto" had another meaning in C until C23). One use-case for C is in macros that handle multiple types, but I expect people have done other things with them too. It would have been nice to see statement expressions included in C23, as they have been in gcc for ages: #define max(a,b) \ ({ __auto_type _a = (a); \ __auto_type _b = (b); \ _a > _b ? _a : _b; }) In general, it's just another tool that could be useful in writing code that's a bit more flexible.