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

时间:2015-04-30 07:55:27

标签: c gcc

使用gcc编译以下代码。

代码:

EventKit

错误:

我收到如下编译错误

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

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

我使用了gcc 4.9.2

2 个答案:

答案 0 :(得分:1)

const变量可以使用常量值(常量表达式)初始化。

  • C

在编译时,i + 1不是常量表达式。

FWIW,甚至

const int n = i;

会给你错误,因为即使声明为consti也不能用作常量表达式作为另一个{{1}的初始化程序}。

  • const
如果使用常量表达式初始化

C++变量,则它们将作为常量表达式。所以,这是允许的。

答案 1 :(得分:0)

需要使用常量初始化

static个变量 C ++编译器将编译它,因为在C ++中const限定变量是常量。在C中,const限定变量不是常量,C编译器会引发错误。