C - initializer element is not constant

写代码的时候, 写出了类似下面的一段代码:

int foo() {
    return 0;
}

int bar = foo();

编译的时候, gcc 报错:

error: initializer element is not constant

在 The C Programming Language 中有这么一段话:

For external and static variables, the initializer must be a constant expression; the initialization is done once, conceptionally before the program begins execution.

先解释下几个名词:

那么, 为什么 External 和 Static 的变量的初始化值要能在编译期间就确定呢?

因为编译完成后, External 和 Static 的变量是位于可执行文件的 data segment 中的, 这部分将和 code segment 一起载入到内存中, 所以他们的初始化值是在运行前就要确定的.