Initialize struct fields

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

    Initialize struct fields

    Hi,

    how is it possible, to only initialize parts of a structure.

    Example:

    typedef struct{
    int a, b;
    ... (huge lot of members);
    double x,y;
    }_s;

    _s s={a=10,x=23.0} ;


    This shall be done BEFORE any code is executed! I mean no initialize
    functions!

    Anyone an idea?
    Andreas


  • Tak-Shing Chan

    #2
    Re: Initialize struct fields

    On Wed, 9 Jul 2003, Andi.Martin wrote:
    [color=blue]
    > how is it possible, to only initialize parts of a structure.[/color]

    In C99, you can use designated initializers:

    typedef struct { int a, b, c, d, e, f, g, h; } thing_t;
    thing_t os = {
    .b = 0,
    .e = 5
    };

    Tak-Shing

    Comment

    • Ben Pfaff

      #3
      Re: Initialize struct fields

      "Andi.Marti n" <Andi.Martin@fr eenet.de> writes:
      [color=blue]
      > how is it possible, to only initialize parts of a structure.
      >
      > Example:
      >
      > typedef struct{
      > int a, b;
      > ... (huge lot of members);
      > double x,y;
      > }_s;
      >
      > _s s={a=10,x=23.0} ;[/color]

      If you mean, by "initialize parts of a structure", to specify
      values for some members, and let the others receive the value 0
      or a null pointer, then you can do it in C99 using the syntax
      {.a = 10, .x = 23.0}
      If you don't have a C99 compiler, you're out of luck. I suggest
      putting the members you want to initialize at the beginning of
      the structure.

      If you mean, by "initialize parts of a structure", to specify
      values for some members, and leave the other ones indeterminate,
      there is no way to do that. C doesn't have partial
      initialization in declarations: an object is either indeterminate
      or fully initialized.

      By the way, _s is a poor choice of names. Names beginning with
      an underscore are generally reserved to the implementation.
      --
      "Your correction is 100% correct and 0% helpful. Well done!"
      --Richard Heathfield

      Comment

      • Robert W Hand

        #4
        Re: Initialize struct fields

        On Wed, 9 Jul 2003 22:17:25 +0200, "Andi.Marti n"
        <Andi.Martin@fr eenet.de> wrote:
        [color=blue]
        >_s s={a=10,x=23.0} ;[/color]

        C99 allows:

        _s s={.a=10, .x=23.0};

        If your compiler is C90, then it is difficult. Can you move the
        members around in the structure definition so that ones to be
        initialized are first?

        BTW, don't begin identifiers with underscores. They are reserved for
        use in file scope for ordinary and tag name spaces.

        Best wishes,

        Bob

        Comment

        • David Rubin

          #5
          Re: Initialize struct fields

          Andi.Martin wrote:[color=blue]
          > Hi,
          >
          > how is it possible, to only initialize parts of a structure.
          >
          > Example:
          >
          > typedef struct{
          > int a, b;
          > ... (huge lot of members);
          > double x,y;
          > }_s;
          >
          > _s s={a=10,x=23.0} ;
          >
          >
          > This shall be done BEFORE any code is executed! I mean no initialize
          > functions![/color]

          Another common way to do this is to create a special instance of the structure
          which is initialized to the values you want:

          /* file scope */
          struct _s init = {0};

          /* in main */
          init.a = 10;
          init.x = 23.0;

          /* in other functions */
          struct _s s = init;

          /david

          --
          FORTRAN was the language of choice
          for the same reason that three-legged races are popular.
          -- Ken Thompson, "Reflection s on Trusting Trust"

          Comment

          • Dan Pop

            #6
            Re: Initialize struct fields

            In <beht72$erp$03$ 1@news.t-online.com> "Andi.Marti n" <Andi.Martin@fr eenet.de> writes:
            [color=blue]
            >how is it possible, to only initialize parts of a structure.
            >
            >Example:
            >
            >typedef struct{
            > int a, b;
            > ... (huge lot of members);
            > double x,y;
            >}_s;
            >
            >_s s={a=10,x=23.0} ;
            >
            >
            >This shall be done BEFORE any code is executed! I mean no initialize
            >functions!
            >
            >Anyone an idea?[/color]

            If you need a portable solution, your only chance is to put the members
            that need initialisation at the beginning on the structure:

            struct {
            int a;
            double x;
            ... (huge lot of members);
            } s = {10, 23.0};

            The members without an explicit initialiser will be initialised to the
            right type of zero.

            Dan
            --
            Dan Pop
            DESY Zeuthen, RZ group
            Email: Dan.Pop@ifh.de

            Comment

            • Finny Merrill

              #7
              Re: Initialize struct fields

              Dan.Pop@cern.ch (Dan Pop) wrote in news:bejjmb$ra0 $2@sunnews.cern .ch:
              [color=blue]
              > If you need a portable solution, your only chance is to put the
              > members that need initialisation at the beginning on the structure:
              >
              > struct {
              > int a;
              > double x;
              > ... (huge lot of members);
              > } s = {10, 23.0};
              >
              > The members without an explicit initialiser will be initialised to the
              > right type of zero.
              >
              > Dan[/color]

              IIRC in C99 you can do struct { int a; double x; /* ... */ } s = {.a = 10,
              ..x = 23.0 };

              Comment

              • Randy Howard

                #8
                Re: Initialize struct fields

                In article <Xns93B45E71742 AEgrievert2norg @167.206.3.3>,
                griever@t2n.org says...[color=blue]
                > Dan.Pop@cern.ch (Dan Pop) wrote in news:bejjmb$ra0 $2@sunnews.cern .ch:
                >[color=green]
                > > If you need a portable solution, your only chance is to put the
                > > members that need initialisation at the beginning on the structure:
                > >
                > > struct {
                > > int a;
                > > double x;
                > > ... (huge lot of members);
                > > } s = {10, 23.0};
                > >
                > > The members without an explicit initialiser will be initialised to the
                > > right type of zero.
                > >
                > > Dan[/color]
                >
                > IIRC in C99 you can do struct { int a; double x; /* ... */ } s = {.a = 10,
                > .x = 23.0 };[/color]

                Requiring C99 for your implementation (which is by no means portable
                today) is the likely reason for Dan's alternate suggestion.


                --
                Randy Howard
                remove the obvious bits from my address to reply.

                Comment

                Working...