It isn't usually compulsory but it makes sense to.
A static variable retains it's value between calls to the function, normally a local variable is lost when the function finishes. As such, it should hold a sensible value so the first time the function is called, it already has something in it.
I don't understand the exact meaning of "initialize static variables during compile time". By C specification, static variables are zeroed at application startup, an action that obviously not occurs "at compile time".
What would be the alternative? I think only disabling initialization of all or part of the static variables, which is an option with some compilers.