Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Declaration vs definition in C

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. Citing the C standard (N1570 Committee Draft — April 12, 2011):

6.7/5 Semantics A declaration specifies the interpretation and attributes of a set of identifiers. A definition of an identifier is a declaration for that identifier that:

— for an object, causes storage to be reserved for that object;

...

Here comes the question: the compiler may optimize away the storage, since we are not using the variable. Is then int a; a declaration then? And what if we do a printf("%p", &a) in main(void) - certainly now the compiler has to allocate storage, so is the concept of declaration/definition dependent on whether you later use the identifier or not?

like image 235
vsoftco Avatar asked Dec 07 '25 01:12

vsoftco


2 Answers

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.

like image 104
M.M Avatar answered Dec 08 '25 14:12

M.M


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.

like image 21
Yu Hao Avatar answered Dec 08 '25 13:12

Yu Hao



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!