对于外部和静态变量,初始值必须是常量表达式吗?

时间:2013-08-08 16:52:48

标签: c

在阅读Dennis M. Ritchie撰写的“The C Programming Language”时,我遇到了这句话:

  

对于外部和静态变量,初始值设定项必须是常量表达式。

我无法理解常量表达式在这里意味着什么,因为下面的代码编译没有任何错误,不是语句: static int a = n-1 ,一个非常量表达式?请指出我在这里缺少什么。提前谢谢。

#include<iostream>
using namespace std;

int main()
{   
int n;
cin>>n;

static int a = n-1;

return 0;
}

3 个答案:

答案 0 :(得分:5)

在C中是必要的,但在C ++中则不然。它们是不同的语言。

The code compiles as C++

but not as C


void foo() { this line is here because of stupid restrictions of Stack Overflow }

答案 1 :(得分:1)

你的代码是C ++,而不是C.一种非常不同的语言。这本书的陈述适用于C,但不适用于C ++。

答案 2 :(得分:0)

文件main.c内容

int main()
{
int n;

static int a = n-1;

return 0;
}

g ++ main.c的输出

//Emptiness because it is valid C++

gcc main.c的输出

main.c: In function ‘main’:
main.c:6: error: initializer element is not constant