为什么在C中不可能用另一个常量初始化常量?

rns*_*tlr 5 c gcc

使用gcc编译以下代码.

代码:

#include <stdio.h>
const int i = 10;
const int n = i+1;
int main() {
    printf("%i\n", i);
    printf("%i\n", n);
}
Run Code Online (Sandbox Code Playgroud)

错误:

我收到如下编译错误

test.c:3:5: error: initializer element is not constant
const int n = i+1;
^
Run Code Online (Sandbox Code Playgroud)

用g ++编译工作得很好并打印10和11.

我使用gcc 4.9.2

hac*_*cks 0

static变量需要用常量初始化。
C++ 编译器会编译它,因为在 C++ 中const限定变量是常量。在 C 中,const限定变量不是常量,C 编译器将引发错误。

  • @Thilo g++ 是一个 C++ 编译器,在 C++ 中常量的规则是不同的。在 C++ 中,可以使用运行时计算的值来初始化常量。C++中的const意味着一旦初始化就不能再改变它的值。 (4认同)
  • 这是错误的。它与 const 无关。extern 和 static 变量在 main() 开始之前初始化,它们的值必须是常量表达式。在 C 中,与 C++ 不同,就“常量表达式”而言,外部 const 变量不算作“常量”。您可以按照自己喜欢的方式初始化 const 局部变量。 (2认同)