Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > comp.lang.c > #390191
| From | Tim Rentsch <tr.17687@z991.linuxsc.com> |
|---|---|
| Newsgroups | comp.lang.c |
| Subject | Re: Struct Error |
| Date | 2025-01-29 07:52 -0800 |
| Organization | A noiseless patient Spider |
| Message-ID | <86cyg51uta.fsf@linuxsc.com> (permalink) |
| References | (2 earlier) <vmt74h$1jac0$1@dont-email.me> <20250124163740.00006281@yahoo.com> <vn61ho$1pf2$1@dont-email.me> <86jzad28d5.fsf@linuxsc.com> <3cd9101a43de105e6aaa74614d05fcba5b8c093c@i2pn2.org> |
Richard Damon <richard@damon-family.org> writes:
> On 1/29/25 5:59 AM, Tim Rentsch wrote:
>
>> bart <bc@freeuk.com> writes:
>>
>>> On 24/01/2025 14:37, Michael S wrote:
>>>
>>>> On Thu, 23 Jan 2025 10:54:10 +0000
>>>> bart <bc@freeuk.com> wrote:
>>>>
>>>>> On 23/01/2025 01:05, James Kuyper wrote:
>>>>>
>>>>>> On 2025-01-22, bart <bc@freeuk.com> wrote:
>>>>>>
>>>>>>> Gcc 14.1 gives me an error compiling this code:
>>>>>>>
>>>>>>> struct vector;
>>>>>>> struct scenet;
>>>>>>>
>>>>>>> struct vector {
>>>>>>> double x;
>>>>>>> double y;
>>>>>>> double z;
>>>>>>> };
>>>>>>>
>>>>>>> struct scenet {
>>>>>>> struct vector center;
>>>>>>> double radius;
>>>>>>> struct scenet (*child)[];
>>>>>>> };
>>>>>>
>>>>>> 6.7.6.2p2: "The element type shall not be an incomplete or
>>>>>> function type."
>>>>>>
>>>>>> I have many draft versions of the C standard. n2912.pdf, dated
>>>>>> 2022-06-08, says in 6.7.2.1.p3 about struct types that "... the
>>>>>> type is incomplete144) until immediately after the closing brace
>>>>>> of the list defining the content, and complete thereafter."
>>>>>>
>>>>>> Therefore, struct scenet is not a complete type until the closing
>>>>>> brace of it's declaration.
>>>>>
>>>>> Wouldn't this also be the case here:
>>>>>
>>>>> struct scenet *child;
>>>>> };
>>>>
>>>> Just to point out if it was not said already: the problem is not
>>>> related specifically to recursive structures. It applies to arrays
>>>> of incomplete types in all circumstances.
>>>>
>>>> struct bar;
>>>> struct bar (*bag)[]; // error
>>>> typedef struct bar (*bat)[]; // error
>>>
>>> I don't think anyone has yet explained why that is an error (other
>>> than C says it is), but not this:
>>>
>>> struct bar *ptr;
>>>
>>> This is a pointer to an incomplete type. Attempts to do ++ptr
>>> for example will fail later on if that struct has not yet been
>>> defined.
>>>
>>> So why not the same for the pointer-to-array versions?
>>
>> The question you should be asking is why did the original C
>> standards body make the rule they did?
>
> My guess is that it makes the simplest implementation of a C compiler
> much more complicated. While I don't think it has been explicited
> stated, one goal the original language, and apparently kept by the
> Standards Comittee, has been to make the language fairly simple to
> proceess to get working code. To optimize to make fast, might take
> more work, but to make your first complier for a system should be
> straight forward. I believe a C compiler can still be done with a
> single pass through the source code, with limited look ahead, and only
> the final "link" step needs to be able to handle large chunks of the
> program.
>
> Allowing the pointer to array time to be based on an incomplete type
> might make this goal harder.
Possibly. I suspect the question was never considered, simply
because it never came up. It's unusual even to have a pointer to
an array with unknown extent, and an array with an incomplete
element type is an even weirder beast. It's easy to believe that
the peculiar circumstances of the situation being asked about
just never occurred to anyone. Given that, the simple rule in
the C standard has an obvious and natural appeal.
Back to comp.lang.c | Previous | Next — Previous in thread | Next in thread | Find similar
Struct Error bart <bc@freeuk.com> - 2025-01-22 16:14 +0000
Re: Struct Error Kaz Kylheku <643-408-1753@kylheku.com> - 2025-01-22 20:05 +0000
Re: Struct Error Ben Bacarisse <ben@bsb.me.uk> - 2025-01-22 21:00 +0000
Re: Struct Error Richard Harnden <richard.nospam@gmail.invalid> - 2025-01-22 20:08 +0000
Re: Struct Error Lawrence D'Oliveiro <ldo@nz.invalid> - 2025-01-22 22:27 +0000
Re: Struct Error James Kuyper <jameskuyper@alumni.caltech.edu> - 2025-01-22 20:05 -0500
Re: Struct Error learningcpp1@gmail.com (m137) - 2025-01-23 03:49 +0000
Re: Struct Error Tim Rentsch <tr.17687@z991.linuxsc.com> - 2025-01-22 23:15 -0800
Re: Struct Error James Kuyper <jameskuyper@alumni.caltech.edu> - 2025-01-23 03:37 -0500
Re: Struct Error Tim Rentsch <tr.17687@z991.linuxsc.com> - 2025-01-22 23:31 -0800
Re: Struct Error bart <bc@freeuk.com> - 2025-01-23 10:54 +0000
Re: Struct Error BGB <cr88192@gmail.com> - 2025-01-23 14:58 -0600
Re: Struct Error bart <bc@freeuk.com> - 2025-01-24 00:51 +0000
Re: Struct Error BGB <cr88192@gmail.com> - 2025-01-24 00:27 -0600
Re: Struct Error David Brown <david.brown@hesbynett.no> - 2025-01-24 09:45 +0100
Re: Struct Error Kaz Kylheku <643-408-1753@kylheku.com> - 2025-01-24 20:31 +0000
Re: Struct Error bart <bc@freeuk.com> - 2025-01-24 22:53 +0000
Re: Struct Error James Kuyper <jameskuyper@alumni.caltech.edu> - 2025-01-24 20:53 -0500
Re: Struct Error James Kuyper <jameskuyper@alumni.caltech.edu> - 2025-01-24 08:43 -0500
Re: Struct Error bart <bc@freeuk.com> - 2025-01-24 23:32 +0000
Re: Struct Error Lawrence D'Oliveiro <ldo@nz.invalid> - 2025-01-23 23:50 +0000
Re: Struct Error bart <bc@freeuk.com> - 2025-01-24 00:37 +0000
Re: Struct Error Lawrence D'Oliveiro <ldo@nz.invalid> - 2025-01-24 00:57 +0000
Re: Struct Error Keith Thompson <Keith.S.Thompson+u@gmail.com> - 2025-01-23 17:23 -0800
Re: Struct Error bart <bc@freeuk.com> - 2025-01-24 01:27 +0000
Re: Struct Error James Kuyper <jameskuyper@alumni.caltech.edu> - 2025-01-24 08:24 -0500
Re: Struct Error Michael S <already5chosen@yahoo.com> - 2025-01-24 16:37 +0200
Re: Struct Error bart <bc@freeuk.com> - 2025-01-26 19:14 +0000
Re: Struct Error Michael S <already5chosen@yahoo.com> - 2025-01-26 23:14 +0200
Re: Struct Error Kaz Kylheku <643-408-1753@kylheku.com> - 2025-01-27 04:05 +0000
Re: Struct Error bart <bc@freeuk.com> - 2025-01-27 20:19 +0000
Re: Struct Error Tim Rentsch <tr.17687@z991.linuxsc.com> - 2025-01-29 02:59 -0800
Re: Struct Error bart <bc@freeuk.com> - 2025-01-29 11:36 +0000
Re: Struct Error Tim Rentsch <tr.17687@z991.linuxsc.com> - 2025-01-30 11:51 -0800
Re: Struct Error Richard Damon <richard@damon-family.org> - 2025-01-29 07:32 -0500
Re: Struct Error Tim Rentsch <tr.17687@z991.linuxsc.com> - 2025-01-29 07:52 -0800
Re: Struct Error Tim Rentsch <tr.17687@z991.linuxsc.com> - 2025-01-22 23:11 -0800
Re: Struct Error Andrey Tarasevich <noone@noone.net> - 2025-02-02 20:35 -0800
csiph-web