struct declaration (silly question)

Collapse
This topic is closed.
X
X
 
  • Time
  • Show
Clear All
new posts
  • Marcin Kasprzak

    struct declaration (silly question)

    Hello Guys,
    Silly question - what is the most elegant way of compiling a code similar
    to this one?

    <code>
    typedef struct a {
    b_t *b;
    } a_t;

    typedef struct b {
    a_t *a;
    } b_t;

    int main(void) {

    return 0;
    }
    </code>

    my solution is to simply change type "b_t" to "void" but I'm not sure
    if that's the best way of dealing with this issue.

    Thanks,

    --
    Marcin Kasprzak
  • Peter Nilsson

    #2
    Re: struct declaration (silly question)

    Marcin Kasprzak <n...@email.add resswrote:
    Hello Guys,
    Silly question...
    The question isn't; that you asked it is. It's a FAQ...



    --
    Peter

    Comment

    • Ben Pfaff

      #3
      Re: struct declaration (silly question)

      Marcin Kasprzak <no@email.addre sswrites:
      Silly question - what is the most elegant way of compiling a code similar
      to this one?
      [code for mutually referential structures]
      Refer to the C FAQ.

      1.14: I can't seem to define a linked list successfully. I tried

      typedef struct {
      char *item;
      NODEPTR next;
      } *NODEPTR;

      but the compiler gave me error messages. Can't a structure in C
      contain a pointer to itself?

      A: Structures in C can certainly contain pointers to themselves;
      the discussion and example in section 6.5 of K&R make this
      clear. The problem with the NODEPTR example is that the typedef
      has not been defined at the point where the "next" field is
      declared. To fix this code, first give the structure a tag
      ("struct node"). Then, declare the "next" field as a simple
      "struct node *", or disentangle the typedef declaration from the
      structure definition, or both. One corrected version would be

      struct node {
      char *item;
      struct node *next;
      };

      typedef struct node *NODEPTR;

      and there are at least three other equivalently correct ways of
      arranging it.

      A similar problem, with a similar solution, can arise when
      attempting to declare a pair of typedef'ed mutually referential
      structures.

      See also question 2.1.

      References: K&R1 Sec. 6.5 p. 101; K&R2 Sec. 6.5 p. 139; ISO
      Sec. 6.5.2, Sec. 6.5.2.3; H&S Sec. 5.6.1 pp. 132-3.
      --
      "I've been on the wagon now for more than a decade. Not a single goto
      in all that time. I just don't need them any more. I don't even use
      break or continue now, except on social occasions of course. And I
      don't get carried away." --Richard Heathfield

      Comment

      • William Pursell

        #4
        Re: struct declaration (silly question)

        On 3 Mar, 04:51, William Pursell <bill.purs...@g mail.comwrote:
        On 3 Mar, 01:12, Marcin Kasprzak <n...@email.add resswrote:
        >
        Silly question - what is the most elegant way of compiling a code similar
        to this one?
        >
        <snip code>
        >
        Others have mentioned the FAQ which deals with the necessary
        forward declaration, but as a point of style, I recommend:
        Ergg...no forward declaration necessary, of course. I
        was distracted by the typedef's and '_t's and mistook
        the question for a different FAQ.

        Comment

        • Marcin Kasprzak

          #5
          Re: struct declaration (silly question)

          Thanks guys for all your help,
          now it works fine.

          Once again thanks.

          --
          Marcin Kasprzak

          Comment

          Working...