Go4Expert

Go4Expert (http://www.go4expert.com/)
-   C (http://www.go4expert.com/forums/c/)
-   -   Difference b/w global and static global variable (http://www.go4expert.com/forums/difference-b-global-static-global-t14122/)

rsodimbakam 22Sep2008 17:51

Difference b/w global and static global variable
 
Hi,
Is there any difference b/w global variable and static global variable ? and when each one is used in real time environement ?

Thanks
Kiran

pradeep 23Sep2008 16:00

Re: Difference b/w global and static global variable
 
Global variable defined with static keyword has a scope limited to translation unit it is defined in. This variable is not "totally" global (possible to use in other source files), it is visible and usable only in this source file (translation unit, to be exact).

internet_bug 24Sep2008 06:49

Re: Difference b/w global and static global variable
 
Static variables are those which are initilaized and defined inside the main() body. These variables can be re-initialied as per requirement and their value changes. On the other hand Global variables are initilaized and defined before the main() body. If you initilialize and define a varibale gloabally it's value will remain constant, meaning whenever you use this variable in your main() body its value used will be the defined value before the main() body . Hope u got that

erislover 25Sep2008 21:54

Re: Difference b/w global and static global variable
 
Quote:

Originally Posted by rsodimbakam
Is there any difference b/w global variable and static global variable?

static is a storage class specifier (static, auto, register, extern). Global variables (those defined outside a function body) without an explicit storage class are always static, but global variables not specifically declared static have external linkage.

Confusing?
Code: c

static int i; // available anywhere in this file (translation unit)
int j; // available anywhere in this file, and in other files by those files using "extern"
extern int k; // available anywhere in this file, but actually declared in some other file;

void main(void)
{ // ...
}


If you have no good reason to allow external linkage, I suggest you explicitly declare global variables to be static. Furthermore, I suggest avoiding global variables unless you have no good alternative. (You may not have a good alternative, especially in embedded systems, given your mention of RTS).


All times are GMT +5.5. The time now is 19:28.