C requires static initialization to be constant, i.e. known at compile time.
When the C compiler compiles File2.c, it doesn't know what x is, thus can
not initialize y.
Different from C, C++ allows static to be lazy initialized the first time it
's used at runtime. So if you put the static in a function, it gets
initialized the first time the function is called. By doing this, it
guarantees the static is always initialized before use.