能否通过调用C语言中的函数来初始化静态全局变量?



可以通过调用C语言的函数来初始化静态全局变量吗?例如:

static int var_01 = fun();

当我在VC6中使用它时,它成功了。但是在GCC 4.6.1中失败了。这很奇怪。我猜这种用法在C89中是非法的?还是其他原因造成的?

在C99中,据我所知,在C89中,具有静态存储持续时间的对象的初始化项必须是常量表达式或字符串文字,来自C99标准部分草案6.7.8 Initialization:

具有static的对象的初始化式中的所有表达式存储持续时间应为常量表达式或字符串字面值。

和函数调用不是6.6 中的常量表达式常量表达式表示(强调我的):

常数表达式不能包含赋值、自增、减量、函数调用或逗号操作符,除非它们是包含在未求值的子表达式中。98)

gcc使用-std=c99-std=c89产生相同的错误,注意我也使用以下标志-Wall -Wextra -pedantic

在Visual Studio编译器的现代版本中,这在C中不起作用(查看实时),但在c++中这是有效的。所以你可能在Visual Studio中将它编译为c++。

因为你的帖子被标记为c。在c中,这是一个编译错误。必须将其初始化为常量字面值。

见:http://www.geeksforgeeks.org/g-fact-80/

最新更新