Declaration vs definition in C

前端 未结 4 938
余生分开走
余生分开走 2020-12-20 00:06

Consider the code:

int main(void)
{
    int a;
}

As far as I know, int a; is a definition, as it causes storage to be reserved

相关标签:
4条回答
  • 2020-12-20 00:11

    Is then int a; a declaration then?

    Yes.

    In fact, every definition is also a declaration. A variable can have only one definition, but could have multiple declarations.

    0 讨论(0)
  • 2020-12-20 00:17

    A declaration introduces an identifier and describes its type, be it a type, object, or function. A declaration is what the compiler needs to accept references to that identifier. These are declarations:

    extern int bar;
    extern int g(int, int);
    

    A definition actually instantiates/implements this identifier. It's what the linker needs in order to link references to those entities. These are definitions corresponding to the above declarations:

    int bar;
    int g(int lhs, int rhs) {return lhs*rhs;}
    
    0 讨论(0)
  • 2020-12-20 00:30

    The text you quoted from 6.7/5 is actually meant to be interpreted the other way around than what you have done: the text is saying that definitions cause storage to be allocated.

    The text which specifies that int a; is a definition is elsewhere.

    C is defined in terms of an abstract machine. There is storage allocated in the abstract machine. Whether or not any memory is allocated on your PC is unrelated.

    0 讨论(0)
  • 2020-12-20 00:32
    int a;
    

    This is a definition There is a memory allocated for variable a

    extern int a;
    

    This is a declaration. Memory is not allocated because it is not defined.

    Once a variable is defined you can use the address of it which is totally legal.

    0 讨论(0)
提交回复
热议问题