In C, if an object that has static storage duration is not initialized explicitly, then:
— if it has pointer type, it is initialized to a NULL pointer;
— if it has arithmetic type, it is initialized to (positive or unsigned) zero;
— if it is an aggregate, every member is initialized (recursively) according to these rules;
— if it is a union, the first named member is initialized (recursively) according to these rules.
For example, following program prints:
Value of g = 0
Value of sg = 0
Value of s = 0
Please write comments if you find anything incorrect, or you want to share more information about the topic discussed above.
The C99 standard
- Difference between Static variables and Register variables in C
- Static Variables in C
- Initialization of static variables in C
- Initialization of global and static variables in C
- How are variables scoped in C - Static or Dynamic?
- Internal static variable vs. External static variable with Examples in C
- C++ Internals | Default Constructors | Set 1
- Templates and Default Arguments
- Default Assignment Operator and References
- Some Interesting facts about default arguments in C++
- C++ default constructor | Built-in types
- Default arguments and virtual function
- C++ | Function Overloading and Default Arguments | Question 5
- When does compiler create default and copy constructors in C++?
- C++ | Function Overloading and Default Arguments | Question 2