Deutsch English Français Italiano |
<vidd2a$18k9j$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: question about linker Date: Fri, 29 Nov 2024 21:52:11 +0000 Organization: A noiseless patient Spider Lines: 100 Message-ID: <vidd2a$18k9j$1@dont-email.me> References: <vi54e9$3ie0o$1@dont-email.me> <vi6sb1$148h7$1@paganini.bofh.team> <vi6uaj$3ve13$2@dont-email.me> <87plmfu2ub.fsf@nosuchdomain.example.com> <vi9jk4$gse4$1@dont-email.me> <vi9kng$gn4c$1@dont-email.me> <87frnbt9jn.fsf@nosuchdomain.example.com> <viaqh0$nm7q$1@dont-email.me> <877c8nt255.fsf@nosuchdomain.example.com> <viasv4$nm7q$2@dont-email.me> <vibr1l$vvjf$1@dont-email.me> <vic73f$1205f$1@dont-email.me> <20241129142810.00007920@yahoo.com> <vicfra$13nl4$1@dont-email.me> <20241129161517.000010b8@yahoo.com> <vicque$15ium$2@dont-email.me> <vid110$16hte$1@dont-email.me> <87mshhsrr0.fsf@nosuchdomain.example.com> MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit Injection-Date: Fri, 29 Nov 2024 22:52:10 +0100 (CET) Injection-Info: dont-email.me; posting-host="4eb9340d280f8b52517112dd0afd3685"; logging-data="1331507"; mail-complaints-to="abuse@eternal-september.org"; posting-account="U2FsdGVkX18iTs2F0xisJLrzTC8jDFww" User-Agent: Mozilla Thunderbird Cancel-Lock: sha1:2gx2Ggq0RtmZyu+meuKS3yxi9SI= In-Reply-To: <87mshhsrr0.fsf@nosuchdomain.example.com> Content-Language: en-GB Bytes: 5374 On 29/11/2024 20:35, Keith Thompson wrote: > Bart <bc@freeuk.com> writes: > [...] >> C's syntax allows a 14-parameter function F to be declared in the same >> statement as a simple int 'i'. > > Yes (except that it's a declaration, not a statement) : > > int i = 42, F(int, int, int, int, int, int, int, > int, int, int, int, int, int, int); > > Are you under the impression that anyone here was not already aware of > that? Would you prefer it if the number of parameters were arbitrarily > restricted to 13? > > Do you think that anyone would actually write code like the above? > > C generally doesn't impose arbitrary restrictions. Because of that, > it's possible to write absurd code like the declaration above. 99% of > programmers simply don't do that, so it's not a problem in practice. > >> I'd say that F and i are different types! (Actually I wouldn't even >> consider F to be type, but a function.) > > Neither F nor i is a type. i is an object (of type int), and F is a > function (of type int(int, int, int, int, int, int, int, int, int, int, > int, int, int, int)). > >> That F(1, 2, 3.0, "5", "six", seven, ...) might yield the same type as >> 'i' is irrelevant here. > > It's relevant to the syntax. i and F can be declared in the same > declaration only because the type of i and the return type of F happen > to be the same. If F returned void, i and F would have to be declared > separately. > > Which, of course, is a good idea anyway. > > You're posting repeatedly trying to convince everyone that C allows > ridiculous code. We already know that. You are wasting everyone's time > telling us something that we already know. Most of us just don't obsess > about it as much as you do. Most of us recognize that, however > convoluted C's declaration syntax might be, it cannot be fixed in a > language calling itself "C". > > Most of us here are more interested in talking about C as it's > specified, and actually trying to understand it, than in complaining > about it. > >> Usually, given these declarations: >> >> int A[100] >> int *B; >> int (*C)(); >> >> people would consider the types of A, B and C to be array, pointer and >> function pointer respectively. Otherwise, which of the 4 or 5 possible >> types would you say that D has here: >> >> int D[3][4][5]; >> >> It depends on how it is used in an expression, which can be any of &D, >> D, D[i], D[i][j], D[i][j][k], none of which include 'Array' type! > > No, the object D unambiguously has type int[3][4][5] (So it would have a different type from E declared on in the same declaration: int D[3][4][5], E; ? In that case tell that to David Brown!) You seem have missed the point of my post, which was a reply to David's remark that 'they can't have totally different types' which was in response to my saying that each variable in the same declaration can 'be [of] a totally different type'. DB is assuming the type of the variable after it's been used in an expression that is fully evaluated to yield its base type. So my A[100] is used as A[i], and D[3][4][5] is used as D[i][j][k]. But of course they may be evaluated only partially, yielding a range of types. > Would you write "const int F();"? Or would you omit the "const"? How > does the fact that "const" is allowed inconvenience you? It's another point of confusion. In my language I don't treat function declarations like variable declarations. A function is not a variable. There is no data storage associated with it. In C it is unfortunate, as it makes it hard to trivially distinguish a function declaration (or the start of a function definition) from a variable declaration.