I am unable to understand why this doesn't work.
extern int i;
int main()
{
printf(" %d ", i);
}
static int i =3;
Also, this doesn't work:
extern int i;
static int i =3;
int main()
{
printf(" %d ", i);
}
But if static
variable is defined before the extern declaration
it works:
static int i =3;
extern int i;
int main()
{
printf(" %d ", i);
}
As I understand from extern int i
tells that i
is present somewhere else and here how it looks lik(int i
)
But, somewhere else means:
1) Maybe, later point in the same
translation unit as a global variable
.
2) Maybe, in some other
translational unit.
I was thinking that (1)
would be valid even though static int i = 3
has restricted i
's scope to the current translation unit where it is defined.
Isn't static int i =3
global
( i mean atleast it is visible in the translation unit) here even though it has the restricted scope to its translation unit? Then why isn't compiler unable to find it?
When I compile the first two versions I get the following compile time error:
error: static declaration of ‘i’ follows non-static declaration
note: previous declaration of ‘i’ was here
I am unable to understand this error message. Also, why it is complaining it as a static declaration
isn't it a definition
also?