Is int a;
a dec开发者_StackOverflowlaration or definition in C? Is there any difference in C++?
I was always thinking it's just a declaration, until today...
Is it a declaration or a definition?
A declaration describes an object, whereas a definition requests the creation of an object. All definitions are also declarations, but the reverse is not true.
In the case of int a;
, what it is depends on where it is placed in the source code:
- Within a function,
int a;
is a definition - it requests the creation of anint
variable with automatic storage duration (and of course also a declaration); - At file scope, the answer is different in C and C++. In C,
int a;
is a tentative definition (of which there can be more than one, as long as the types and linkage are agreeable); in C++, it is an ordinary definition with external linkage. - Within a
struct
orunion
specifier,int a;
is a declaration of a member.
Where does it appear in your program?
In most contexts, it is both a declaration and definition.
OTOH, extern int a;
is a declaration only.
Consider:
int a;
It's a definition as well as a declaration.
Consider the following example...
int i;
printf("%d", i);
Some junk value will be printed. Which obviously means it's got a memory location.
If you want to just declare a variable and not define it then go for "extern" keyword.
Thus extern int b;
is just a declaration and not a definition.
Example:
extern int var;
int main(void)
{
var = 10;
return 0;
}
Thus the above program will throw an error as "var" was not defined anywhere.
精彩评论