Global and static variables are initialized to their default values because it is in the C or C++ standards and it is free to assign a value by zero at compile time. Both static and global variable behave same to the generated object code.
Yes, all members of a are guaranteed to be initialised to 0. If an object that has static storage duration is not initialized explicitly, it is initialized implicitly as if every member that has arithmetic type were assigned 0 and every member that has pointer type were assigned a null pointer constant.
This error occurs only for local variables since Java automatically initializes the instance variables at compile time (it sets 0 for integers, false for boolean, etc.). However, local variables need a default value because the Java compiler doesn't allow the use of uninitialized variables.
Yes, it's because it's in the standard; but really, it's because it's free. Static variables look just like global variables to the generated object code.
Because that's the way it is, according to the C Standard. The reason for that is efficiency:
static variables are initialized at compile-time, since their address is known and fixed. Initializing them to 0
does not incur a runtime cost.
automatic variables can have different addresses for different calls and would have to be initialized at runtime each time the function is called, incurring a runtime cost that may not be needed. If you do need that initialization, then request it.
global
and static
variables are stored in the Data Segment (DS) when initialized and block start by symbol (BSS)` when uninitialized.
These variables have a fixed memory location, and memory is allocated at compile time.
Thus global
and static
variables have '0'
as their default values.
Whereas auto
variables are stored on the stack, and they do not have a fixed memory location.
Memory is allocated to auto
variables at runtime, but not at
compile time. Hence auto
variables have their default value as garbage.
You've chosen simple variables, but consider:
void matrix_manipulation(void)
{
int matrix1[100][100];
int matrix2[100][100];
int matrix3[100][100];
/* code to read values for matrix1 from a file */
/* code to read values for matrix2 from a file */
/* code to multiply matrix1 by matrix2 storing the result in matrix3 */
/* code to use matrix3 somehow */
}
If the system initialized the arrays to 0, the effort would be wasted; the initialization is overwritten by the rest of the function. C avoids hidden costs whenever possible.
Global variables are allocated and initialized before the main
function starts, while local variables are generated on the stack as the instance of the program runs.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With