#include <stdio.h>
#define TEST_3
void FuncA ()
{
#ifdef TEST_0
// 0 value initialization only happen once if defined 'static'.
static int StaticVar=0;
#endif
#ifdef TEST_1
// 0 value initialization happen every time when FuncA is called.
int StaticVar=0;
#endif
#ifdef TEST_2
// When not give inital value, system set StaticVar to '0'
// Changed value will stay next time when FuncA is called as StaticVar
// is defined with keyward 'static'.
static int StaticVar;
printf("StaticVar is : %d\n",StaticVar);
StaticVar = 2;
#endif
#ifdef TEST_3
// When no 'static', system set StaticVar to a random value.
// (I think it depends on what value in stack.)
// But in test it seems, StaticVar keep same value as it's retrieving
// value from same postion in stack.
int StaticVar;
printf("StaticVar is : %d\n",StaticVar);
StaticVar = 3;
#endif
printf("StaticVar is : %d\n",StaticVar);
StaticVar++;
}
void main()
{
FuncA();
FuncA();
FuncA();
FuncA();
FuncA();
FuncA();
printf ("====Done====\n");
}
The results after defining different test cases:Test_0
qyang@lubuntu-laptop:~$ ./Learn_static StaticVar is : 0 StaticVar is : 1 StaticVar is : 2 StaticVar is : 3 StaticVar is : 4 StaticVar is : 5 ====Done====Test_1
qyang@lubuntu-laptop:~$ ./Learn_static StaticVar is : 0 StaticVar is : 0 StaticVar is : 0 StaticVar is : 0 StaticVar is : 0 StaticVar is : 0 ====Done====Test_2
qyang@lubuntu-laptop:~$ ./Learn_static StaticVar is : 0 StaticVar is : 2 StaticVar is : 3 StaticVar is : 2 StaticVar is : 3 StaticVar is : 2 StaticVar is : 3 StaticVar is : 2 StaticVar is : 3 StaticVar is : 2 StaticVar is : 3 StaticVar is : 2 ====Done====Test_3
qyang@lubuntu-laptop:~$ ./Learn_static StaticVar is : 134513947 StaticVar is : 3 StaticVar is : 4 StaticVar is : 3 StaticVar is : 4 StaticVar is : 3 StaticVar is : 4 StaticVar is : 3 StaticVar is : 4 StaticVar is : 3 StaticVar is : 4 StaticVar is : 3 ====Done====
No comments:
Post a Comment