question on structures.

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

    question on structures.


    typedef struct y
    {
    x1 *c;
    x2 *c;
    } y;

    typedef struct x1
    {
    y *a;
    }x1;

    typedef struct x2
    {
    y *b;
    }x2;


    ^^ If I want to have declarations like that in my program, then what
    should I do ? Would it work if I put these two lines before the
    declaration of y -

    typedef struct x1 x1;
    typedef struct x2 x2;
  • Peter Nilsson

    #2
    Re: question on structures.

    broli <Brol...@gmail. comwrote:
    typedef struct y
    {
      x1 *c;
      x2 *c;
    } y;
    >
    typedef struct x1
    {
      y *a;
    }x1;
    >
    typedef struct x2
    {
      y *b;
    >
    }x2;
    >
    ^^ If I want to have declarations like that in my
    program, then what should I do ?
    Read the FAQ.


    Would it work if I put these two lines before the
    declaration of y -
    >
    typedef struct x1 x1;
    typedef struct x2 x2;
    Yes, but you don't need the typedefs...

    struct y
    {
    struct x1 *c;
    struct x2 *c;
    };

    struct x1
    {
    struct y *a;
    };

    struct x2
    {
    struct y *b;
    };

    --
    Peter

    Comment

    • broli

      #3
      Re: question on structures.

      On Mar 26, 10:56 am, Peter Nilsson <ai...@acay.com .auwrote:
      broli <Brol...@gmail. comwrote:
      typedef struct y
      {
      x1 *c;
      x2 *c;
      } y;
      >
      typedef struct x1
      {
      y *a;
      }x1;
      >
      typedef struct x2
      {
      y *b;
      >
      }x2;
      >
      ^^ If I want to have declarations like that in my
      program, then what should I do ?
      >
      Read the FAQ.
      >

      >
      Would it work if I put these two lines before the
      declaration of y -
      >
      typedef struct x1 x1;
      typedef struct x2 x2;
      >
      Yes, but you don't need the typedefs...
      >
      struct y
      {
      struct x1 *c;
      struct x2 *c;
      };
      >
      struct x1
      {
      struct y *a;
      };
      >
      struct x2
      {
      struct y *b;
      };
      >
      Why is it wrong to use typedef here ? Or are you trying to say that if
      I precede the struct x1 and x2 declarations with following two
      statements -
      typedef struct x1 x1;
      typedef struct x2 x2;

      Then I don't need to add the typedef keyword again when declaring the
      structs ?

      Comment

      • broli

        #4
        Re: question on structures.

        Specifically, this is my problem -

        typedef struct VertexData VertexData;
        typedef struct EdgeData EdgeData;
        typedef struct TriangleData TriangleData;

        typedef struct HalfData{
        HalfData *next;
        HalfData *previous;
        HalfData *next;
        VertexData *origin;
        TriangleData *left;
        EdgeData *edge;
        }HalfData;

        struct VertexData{
        HalfData* half;
        };

        struct EdgeData{
        HalfData* half;
        };

        struct PolygonData{
        HalfData* half;
        };

        Have I used a wrong notation over here ?

        Comment

        • Nick Keighley

          #5
          Re: question on structures.

          On 26 Mar, 06:09, broli <Brol...@gmail. comwrote:
          On Mar 26, 10:56 am, Peter Nilsson <ai...@acay.com .auwrote:
          broli <Brol...@gmail. comwrote:
          typedef struct y
          {
            x1 *c;
            x2 *c;
          } y;
          >
          typedef struct x1
          {
            y *a;
          }x1;
          >
          typedef struct x2
          {
            y *b;
          >
          }x2;
          >
          ^^ If I want to have declarations like that in my
          program, then what should I do ?
          >
          Read the FAQ.
          >>
          Would it work if I put these two lines before the
          declaration of y -
          >
          typedef struct x1 x1;
          typedef struct x2 x2;
          >
          Yes, but you don't need the typedefs...
          >
            struct y
            {
              struct x1 *c;
              struct x2 *c;
            };
          >
            struct x1
            {
              struct y *a;
            };
          >
            struct x2
            {
              struct y *b;
            };
          >
          Why is it wrong to use typedef here ?
          he's not saying the typedefs are "wrong" he's saying
          they are unnecessary. Many C programmers don't like
          typedefing structs. Many do. It's a style thing.
          (I'm a typedefer myself, I thing making struct
          part of the type name is ugly).

          Or are you trying to say that if
          I precede the struct x1 and x2 declarations with following two
          statements -
          typedef struct x1 x1;
          typedef struct x2 x2;
          >
          Then I don't need to add the typedef keyword again when declaring the
          structs?
          you can declare structs without using typedef.


          --
          Nick Keighley

          Comment

          • santosh

            #6
            Re: question on structures.

            broli wrote:
            Specifically, this is my problem -
            >
            typedef struct VertexData VertexData;
            typedef struct EdgeData EdgeData;
            typedef struct TriangleData TriangleData;
            >
            typedef struct HalfData{
            HalfData *next;
            HalfData *previous;
            HalfData *next;
            This is a duplicate member.
            VertexData *origin;
            TriangleData *left;
            EdgeData *edge;
            }HalfData;
            I would define the above as a plain struct declaration and later typedef
            it.

            struct HalfData {
            /* ... */
            };

            typedef struct HalfData HalfData;

            Also I don't like the practise of giving same names for both the struct
            tags and the corresponding typedef, but that is a style issue.
            struct VertexData{
            HalfData* half;
            };
            >
            struct EdgeData{
            HalfData* half;
            };
            >
            struct PolygonData{
            HalfData* half;
            };
            >
            Have I used a wrong notation over here ?
            Yes, for HalfData declaration.

            Comment

            • broli

              #7
              Re: question on structures.

              On Mar 26, 2:48 pm, santosh <santosh....@gm ail.comwrote:
              broli wrote:
              Specifically, this is my problem -
              >
              typedef struct VertexData VertexData;
              typedef struct EdgeData EdgeData;
              typedef struct TriangleData TriangleData;
              >
              typedef struct HalfData{
              HalfData *next;
              HalfData *previous;
              HalfData *next;
              >
              This is a duplicate member.
              >
              VertexData *origin;
              TriangleData *left;
              EdgeData *edge;
              }HalfData;
              >
              I would define the above as a plain struct declaration and later typedef
              it.
              >
              struct HalfData {
              /* ... */
              };
              >
              typedef struct HalfData HalfData;
              >
              Also I don't like the practise of giving same names for both the struct
              tags and the corresponding typedef, but that is a style issue.
              >
              struct VertexData{
              HalfData* half;
              };
              >
              struct EdgeData{
              HalfData* half;
              };
              >
              struct PolygonData{
              HalfData* half;
              };
              >
              Have I used a wrong notation over here ?
              >
              Yes, for HalfData declaration.
              Ok so I take your suggestions -

              typedef struct VertexDataStruc t VertexData;
              typedef struct EdgeDataStruct EdgeData;
              typedef struct TriangleDataStr uct TriangleData;

              struct HalfDataStruct{
              struct HalfDataStruct *next;
              struct HalfDataStruct *previous;
              struct HalfDataStruct *next;
              };

              typedef struct HalfDataStruct HalfData;

              ( I still don't see how this is different from what i did previously
              ie typedef struct HalfData{
              ......}Halfdata ;)

              struct VertexDataStruc t{
              ....
              };

              struct EdgeDataStruct{
              ....
              };

              struct TriangleDataStr uct{
              ....
              };

              Comment

              • broli

                #8
                Re: question on structures.

                On Mar 26, 3:47 pm, broli <Brol...@gmail. comwrote:
                On Mar 26, 2:48 pm, santosh <santosh....@gm ail.comwrote:
                >
                >
                >
                broli wrote:
                Specifically, this is my problem -
                >
                typedef struct VertexData VertexData;
                typedef struct EdgeData EdgeData;
                typedef struct TriangleData TriangleData;
                >
                typedef struct HalfData{
                HalfData *next;
                HalfData *previous;
                HalfData *next;
                >
                This is a duplicate member.
                >
                VertexData *origin;
                TriangleData *left;
                EdgeData *edge;
                }HalfData;
                >
                I would define the above as a plain struct declaration and later typedef
                it.
                >
                struct HalfData {
                /* ... */
                };
                >
                typedef struct HalfData HalfData;
                >
                Also I don't like the practise of giving same names for both the struct
                tags and the corresponding typedef, but that is a style issue.
                >
                struct VertexData{
                HalfData* half;
                };
                >
                struct EdgeData{
                HalfData* half;
                };
                >
                struct PolygonData{
                HalfData* half;
                };
                >
                Have I used a wrong notation over here ?
                >
                Yes, for HalfData declaration.
                >
                Ok so I take your suggestions -
                >
                typedef struct VertexDataStruc t VertexData;
                typedef struct EdgeDataStruct EdgeData;
                typedef struct TriangleDataStr uct TriangleData;
                >
                struct HalfDataStruct{
                struct HalfDataStruct *next;
                struct HalfDataStruct *previous;
                struct HalfDataStruct *next;
                };
                >
                typedef struct HalfDataStruct HalfData;
                >
                ( I still don't see how this is different from what i did previously
                ie typedef struct HalfData{
                .....}Halfdata; )
                >
                struct VertexDataStruc t{
                ...
                >
                };
                >
                struct EdgeDataStruct{
                ...
                >
                };
                >
                struct TriangleDataStr uct{
                ...
                >
                };

                ^^ oops im sorry there i repeated the same mistake (duplicate member)
                in half data but please ignore it as it is not signifcant to the
                discussion

                Comment

                • broli

                  #9
                  Re: question on structures.

                  I believe this is even a clearer approach as given in C FAQ 1.15 -

                  struct VertexDataStruc t;
                  struct EdgeDataStruct;
                  struct TriangleDataStr uct;

                  struct HalfDataStruct{
                  struct HalfDataStruct *next;
                  struct HalfDataStruct *previous;
                  struct VertexDataStruc t *origin;
                  struct TriangleDataStr uct *left;
                  struct EdgeDataStruct *edge;
                  };

                  struct VertexDataStruc t{
                  struct HalfDataStruct *half;
                  };

                  struct EdgeDataStruct{
                  struct HalfDataStruct *half;
                  };

                  struct TriangleDataStr uct{
                  struct HalfDataStruct *half;
                  };

                  typedef struct HalfDataStruct HalfData;
                  typedef struct VertexDataStruc t VertexData;
                  typedef struct EdgeDataStruct EdgeData;
                  typedef struct TriangleDataStr uct TriangleData;

                  Comment

                  Working...