what's meaning of "warning: initializer element is not computable at load time"

Discussion in 'C Programming' started by bingfeng, Jun 1, 2005.

  1. bingfeng

    bingfeng Guest

    I have some codes generated by perl, in which initialize some huge
    struct,such as

    PARA TOS_network_spantree_set_0_para_0 = { "vlan", emNUM, NULL, "",
    "configuration on a designated vlan", PRO_REQUIRED };
    const char* TOS_network_spantree_set_0_para_1_emvalue[] = { "disable",
    "enable", NULL };
    PARA TOS_network_spantree_set_0_para_1 = { "", emENUM,
    TOS_network_spantree_set_0_para_1_emvalue, "", "enable or disable STP",
    PRO_REQUIRED };
    PPARA TOS_network_spantree_set_0_para[] = {
    &TOS_network_spantree_set_0_para_0,
    &TOS_network_spantree_set_0_para_1,
    NULL
    }
    ......

    gcc(C89 setting) report warnings about that, but C99 not. I ignore those
    warnings and try to dump the struct, the program crashed after some output.
    what wrong and how I can fix it?

    thanks a lot
     
    bingfeng, Jun 1, 2005
    #1
    1. Advertising

  2. bingfeng

    Jack Klein Guest

    On Wed, 1 Jun 2005 14:17:01 +0800, "bingfeng"
    <> wrote in comp.lang.c:

    > I have some codes generated by perl, in which initialize some huge
    > struct,such as


    PERL is off-topic here, and your code snippet is littered with types
    not defined by C, so it is hard to tell.

    > PARA TOS_network_spantree_set_0_para_0 = { "vlan", emNUM, NULL, "",


    What is the definition of the type 'PARA'? It appears to be 'pointer
    to pointer to char' or 'pointer to pointer to const char'.

    > "configuration on a designated vlan", PRO_REQUIRED };
    > const char* TOS_network_spantree_set_0_para_1_emvalue[] = { "disable",
    > "enable", NULL };
    > PARA TOS_network_spantree_set_0_para_1 = { "", emENUM,
    > TOS_network_spantree_set_0_para_1_emvalue, "", "enable or disable STP",


    If I am right about the definition of 'PARA', the initialization of is
    wrong. "" and "enable or disable STP" are string literals, but
    'TOS_network_spantree_set_0_para_1_emvalue' decays into a pointer to
    pointer to char, a different type.

    > PRO_REQUIRED };
    > PPARA TOS_network_spantree_set_0_para[] = {
    > &TOS_network_spantree_set_0_para_0,
    > &TOS_network_spantree_set_0_para_1,
    > NULL
    > }
    > ......
    >
    > gcc(C89 setting) report warnings about that, but C99 not. I ignore those
    > warnings and try to dump the struct, the program crashed after some output.
    > what wrong and how I can fix it?
    >
    > thanks a lot


    I would say you have two options, one is to post the definitions of
    all the UPPER CASE types and values used in the code snippet. The
    other is to talk to the person who wrote the PERL code that generates
    this, as it seems to be incorrect.

    By the way, it is a very good idea indicate the exact line of your
    code snippet that the compiler indicated was the cause of the error.

    --
    Jack Klein
    Home: http://JK-Technology.Com
    FAQs for
    comp.lang.c http://www.eskimo.com/~scs/C-faq/top.html
    comp.lang.c++ http://www.parashift.com/c -faq-lite/
    alt.comp.lang.learn.c-c++
    http://www.contrib.andrew.cmu.edu/~ajo/docs/FAQ-acllc.html
     
    Jack Klein, Jun 1, 2005
    #2
    1. Advertising

  3. bingfeng

    Richard Bos Guest

    Jack Klein <> wrote:

    > On Wed, 1 Jun 2005 14:17:01 +0800, "bingfeng"
    > <> wrote in comp.lang.c:
    >
    > > gcc(C89 setting) report warnings about that, but C99 not. I ignore those
    > > warnings and try to dump the struct, the program crashed after some output.
    > > what wrong and how I can fix it?

    >
    > I would say you have two options, one is to post the definitions of
    > all the UPPER CASE types and values used in the code snippet.


    > By the way, it is a very good idea indicate the exact line of your
    > code snippet that the compiler indicated was the cause of the error.


    _And_ the exact text of the warning itself. It could warn about
    "incompatible types" or about "uninitialised objects" or about "your
    indentation style is ugly", and the solution would be different in each
    case.

    Richard
     
    Richard Bos, Jun 1, 2005
    #3
  4. bingfeng

    Chris Torek Guest

    >> On Wed, 1 Jun 2005 14:17:01 +0800, "bingfeng"
    >> <> wrote in comp.lang.c:
    >>>gcc(C89 setting) report warnings about that, but C99 not. I ignore
    >>>those warnings and try to dump the struct, the program crashed after
    >>>some output. what wrong and how I can fix it?


    >Jack Klein <> wrote:
    >>I would say you have two options, one is to post the definitions of
    >>all the UPPER CASE types and values used in the code snippet.


    Indeed -- although I suspect the problem causing the crash is something
    else entirely.

    >>By the way, it is a very good idea indicate the exact line of your
    >>code snippet that the compiler indicated was the cause of the error.


    In article <4all.nl>,
    Richard Bos <> wrote:
    >_And_ the exact text of the warning itself. It could warn about
    >"incompatible types" or about "uninitialised objects" or about "your
    >indentation style is ugly", and the solution would be different in each
    >case.


    As it happens, the exact text of the warning is in the "subject"
    header line. But this is not always visible to everyone when
    reading the message body, so it should be repeated in (or moved
    to) the message body:

    "warning: initializer element is not computable at load time"

    This particular warning is one that GCC emits when you use GCC's
    C89-extension that allows initializing aggregates with non-constant
    values. For instance:

    % cat t.c
    void f(int x, int y) {
    int a[2] = { x, y };
    ...
    }

    This code is allowed in C99, but not in C89. GCC allows it even
    without -std=c99, but will issue a diagnostic when requested:

    % cc -O2 -c -W -Wall t.c
    % cc -ansi -pedantic -O2 -c t.c
    t.c: In function `f':
    t.c:3: warning: initializer element is not computable at load time
    t.c:3: warning: initializer element is not computable at load time
    % cc -std=c99 -pedantic -O2 -c t.c
    %

    (note that "-ansi" means the same as "-std=c89", and "-pedantic"
    is the option that tells GCC to emit the required diagnostic).
    --
    In-Real-Life: Chris Torek, Wind River Systems
    Salt Lake City, UT, USA (40°39.22'N, 111°50.29'W) +1 801 277 2603
    email: forget about it http://web.torek.net/torek/index.html
    Reading email is like searching for food in the garbage, thanks to spammers.
     
    Chris Torek, Jun 1, 2005
    #4
  5. bingfeng

    bingfeng Guest

    thanks to all warmhearted persons at first!

    I know the exact answer of that question: I initialized a huge struct in a
    function then return the address of struct to caller! Auto variables are not
    stored in static memory, so loader cannot load it properly. Of course, it's
    a fundamental to use static variables in such case, but the parts are in
    global at first. I didn't want to introduce too many global names to global
    namespace, and it seems initialize such struct is impossible, so I move it
    into a function scope and emit add static keyword(you know, all the code was
    generated automatic by some other tool). The difference of result C89, C99
    and C++
    generated misled I compare the different features they supported, sigh!

    As to the coredump, someone told me maybe too many local variables occupy a
    lot of stack, and my test routine use recursive calls, all of that in eacess
    of size of stack, so app crashed. I think him is right.

    If gcc mention "local variable" or "auto variable", I would notice such
    basic and important bug, but I spend four hours before I ask others view my
    code!


    "Jack Klein" <> ????
    news:...
    > On Wed, 1 Jun 2005 14:17:01 +0800, "bingfeng"
    > <> wrote in comp.lang.c:
    >
    > > I have some codes generated by perl, in which initialize some huge
    > > struct,such as

    >
    > PERL is off-topic here, and your code snippet is littered with types
    > not defined by C, so it is hard to tell.
    >
    > > PARA TOS_network_spantree_set_0_para_0 = { "vlan", emNUM, NULL, "",

    >
    > What is the definition of the type 'PARA'? It appears to be 'pointer
    > to pointer to char' or 'pointer to pointer to const char'.
    >
    > > "configuration on a designated vlan", PRO_REQUIRED };
    > > const char* TOS_network_spantree_set_0_para_1_emvalue[] = {

    "disable",
    > > "enable", NULL };
    > > PARA TOS_network_spantree_set_0_para_1 = { "", emENUM,
    > > TOS_network_spantree_set_0_para_1_emvalue, "", "enable or disable STP",

    >
    > If I am right about the definition of 'PARA', the initialization of is
    > wrong. "" and "enable or disable STP" are string literals, but
    > 'TOS_network_spantree_set_0_para_1_emvalue' decays into a pointer to
    > pointer to char, a different type.
    >
    > > PRO_REQUIRED };
    > > PPARA TOS_network_spantree_set_0_para[] = {
    > > &TOS_network_spantree_set_0_para_0,
    > > &TOS_network_spantree_set_0_para_1,
    > > NULL
    > > }
    > > ......
    > >
    > > gcc(C89 setting) report warnings about that, but C99 not. I ignore those
    > > warnings and try to dump the struct, the program crashed after some

    output.
    > > what wrong and how I can fix it?
    > >
    > > thanks a lot

    >
    > I would say you have two options, one is to post the definitions of
    > all the UPPER CASE types and values used in the code snippet. The
    > other is to talk to the person who wrote the PERL code that generates
    > this, as it seems to be incorrect.
    >
    > By the way, it is a very good idea indicate the exact line of your
    > code snippet that the compiler indicated was the cause of the error.
    >
    > --
    > Jack Klein
    > Home: http://JK-Technology.Com
    > FAQs for
    > comp.lang.c http://www.eskimo.com/~scs/C-faq/top.html
    > comp.lang.c++ http://www.parashift.com/c -faq-lite/
    > alt.comp.lang.learn.c-c++
    > http://www.contrib.andrew.cmu.edu/~ajo/docs/FAQ-acllc.html
     
    bingfeng, Jun 2, 2005
    #5
    1. Advertising

Want to reply to this thread or ask your own question?

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.
Similar Threads
  1. Sander Odekerken

    Meaning of output value?

    Sander Odekerken, May 18, 2004, in forum: VHDL
    Replies:
    2
    Views:
    2,496
    John_H
    May 18, 2004
  2. Parthav
    Replies:
    4
    Views:
    1,907
    Mike Treseler
    Jan 13, 2006
  3. Frank

    Meaning of <%#

    Frank, Dec 30, 2003, in forum: ASP .Net
    Replies:
    4
    Views:
    579
  4. bingfeng
    Replies:
    3
    Views:
    577
    Chris Torek
    Jun 6, 2005
  5. Replies:
    4
    Views:
    768
Loading...

Share This Page