Discuss all the details regarding Static variables in C.
Static (and global) variables are initialized during the compile-time, so the initial values will simply be embeded in the executable file itself.
1.static is the default storage class for global variables. The two variables below (count and road) both have a static storage class.
2.'static' can also be defined within a function. If this is done, the variable
is initalised at compilation time and retains its value between calls.
Because it is initialsed at compilation time, the initalistation value
must be a constant.
3.There is one very important use for 'static'. Consider this bit of code.
'Func' returns a pointer to the memory location where 'Text2' starts
BUT Text2 has a storage class of auto and will disappear
when we exit the function and could be overwritten by something else. The
answer is to specify:
The storage assigned to 'Text2' will remain reserved for the duration if the
program.
4.The static storage class specifier can only be applied to the following names:
#ifndef __static_var_definitions__
#define __static_var_definitions__
static int gblCounter;
#endif
Static (and global) variables are initialized during the compile-time, so the initial values will simply be embeded in the executable file itself.
1.static is the default storage class for global variables. The two variables below (count and road) both have a static storage class.
static int Count; int Road; main() { printf("%d\n", Count); printf("%d\n", Road); } |
void Func(void) { static Count=1; } |
char *Func(void); main() { char *Text1; Text1 = Func(); } char *Func(void) { char Text2[10]="martin"; return(Text2); } |
static char Text[10]="martin"; |
4.The static storage class specifier can only be applied to the following names:
- Objects
- Functions
- Class members
- Anonymous unions
- Type declarations
- Function declarations within a block
- Function parameters
Note:
Static (becoming global in header files) variables can be defined in
.h file. However, their definition should also be provided in the same header
file. But , doing this makes the static variable as a private copy of
the header file ie it cannot be used elsewhere. In normal cases, this is
not intended from a header file.However you should make sure that the header is accepted only
once by including #ifndef and #ifdef. By this the compiler will not
raise errors saying redefinition of same variable.#ifndef __static_var_definitions__
#define __static_var_definitions__
static int gblCounter;
#endif
void countFunction(void)
ReplyDelete{
static int var = 0;
var = var + 1;
printf("Value is %d\n", var);
}
The FIRST TIME YOU CALL the function var will be initialized as 0 and the function will show "Value is 1". Nevertheless, at the second time, var will be already allocated and at a global area. It will not be initialized again and the function will display "Value is 2".
Static variables and speed of execution---
ReplyDeletehttp://stackoverflow.com/questions/6636295/static-variables-in-functions
static variables and Storage---
http://stackoverflow.com/questions/4755541/static-variable-storage
static extern vs extern static----
http://stackoverflow.com/questions/7484773/static-extern-vs-extern-static
Accessing static variable from another file---
http://stackoverflow.com/questions/3989607/accessing-static-variable-value
static variable to point next element---
http://stackoverflow.com/questions/3697961/c-static-variable-problem