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.