Why are global variables always initialized to ‘0’, but not local variables? [duplicate]

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.

Leave a Comment