инициализация статической переменной с помощью вызова функции дает ошибку компиляции?

#include 
int foo(){
    return 1;
}
int main(void) {
    static int q = foo(); 
    return 0;
}

Вот ссылка на то же самое. Это код C, а не C ++. Он компилируется и работает нормально на C ++, но не на C.

Этот код получал ошибку компиляции. Может кто-нибудь объяснить, почему он получает ошибку? Могут ли статические члены инициализироваться только постоянными значениями? В C ++ мы должны определить статические члены после их объявления, почему это не требуется в C? Я не могНе найти ни одной темы с похожим запросом или хорошим ответом.

Ответы на вопрос(3)

Ваш ответ на вопрос