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?
See Question&Answers more detail:
os 与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…