Re: Struct Error

Liste des GroupesRevenir à cl c 
Sujet : Re: Struct Error
De : bc (at) *nospam* freeuk.com (bart)
Groupes : comp.lang.c
Date : 29. Jan 2025, 12:36:21
Autres entêtes
Organisation : A noiseless patient Spider
Message-ID : <vnd3rl$2bqlb$1@dont-email.me>
References : 1 2 3 4 5 6
User-Agent : Mozilla Thunderbird
On 29/01/2025 10:59, 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?
 The answer might be because this exception to a simple and
general rule is almost never useful, and never necessary.
Well, you never see such a thing in use, certainly. I wonder why that is!
When a language outlaws some particular construction, forcing people to stick to a particular idiom (the common use of a T* type to work with pointers and arrays instead of the more sensible and safer T(*)[]), then clearly you're not going to see such uses in the field.
Although there are really two parts to it: use of T(*)[] generally (outside of self-referential structs) is allowed, but that is still rare, presumably because the syntax is too unwieldy. Or people simply don't know about it, since everyone uses T*.
My use-case was within generated code, so that aspect was not relevant.

Considering that it has been 35 years since that original rule
was made, and 2025 is the first time the question has come up,
the indications are that the original decision was a good one.
We don't know that. Perhaps it comes up all the time, people realise they can't use such a construct, and use a different approach.

Date Sujet#  Auteur
22 Jan 25 * Struct Error38bart
22 Jan 25 +* Re: Struct Error2Kaz Kylheku
22 Jan 25 i`- Re: Struct Error1Ben Bacarisse
22 Jan 25 +- Re: Struct Error1Richard Harnden
22 Jan 25 +- Re: Struct Error1Lawrence D'Oliveiro
23 Jan 25 +* Re: Struct Error31James Kuyper
23 Jan 25 i+* Re: Struct Error3m137
23 Jan 25 ii+- Re: Struct Error1Tim Rentsch
23 Jan 25 ii`- Re: Struct Error1James Kuyper
23 Jan 25 i+- Re: Struct Error1Tim Rentsch
23 Jan 25 i`* Re: Struct Error26bart
23 Jan 25 i +* Re: Struct Error9BGB
24 Jan 25 i i`* Re: Struct Error8bart
24 Jan 25 i i +- Re: Struct Error1BGB
24 Jan 25 i i +* Re: Struct Error4David Brown
24 Jan 25 i i i`* Re: Struct Error3Kaz Kylheku
24 Jan 25 i i i +- Re: Struct Error1bart
25 Jan 25 i i i `- Re: Struct Error1James Kuyper
24 Jan 25 i i `* Re: Struct Error2James Kuyper
25 Jan 25 i i  `- Re: Struct Error1bart
24 Jan 25 i +* Re: Struct Error5Lawrence D'Oliveiro
24 Jan 25 i i`* Re: Struct Error4bart
24 Jan 25 i i `* Re: Struct Error3Lawrence D'Oliveiro
24 Jan 25 i i  +- Re: Struct Error1Keith Thompson
24 Jan 25 i i  `- Re: Struct Error1bart
24 Jan 25 i +- Re: Struct Error1James Kuyper
24 Jan 25 i `* Re: Struct Error10Michael S
26 Jan 25 i  `* Re: Struct Error9bart
26 Jan 25 i   +- Re: Struct Error1Michael S
27 Jan 25 i   +* Re: Struct Error2Kaz Kylheku
27 Jan 25 i   i`- Re: Struct Error1bart
29 Jan 25 i   `* Re: Struct Error5Tim Rentsch
29 Jan 25 i    +* Re: Struct Error2bart
30 Jan 25 i    i`- Re: Struct Error1Tim Rentsch
29 Jan 25 i    `* Re: Struct Error2Richard Damon
29 Jan 25 i     `- Re: Struct Error1Tim Rentsch
23 Jan 25 +- Re: Struct Error1Tim Rentsch
3 Feb 25 `- Re: Struct Error1Andrey Tarasevich

Haut de la page

Les messages affichés proviennent d'usenet.

NewsPortal