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