我可以通过调用C语言中的函数来初始化静态全局变量吗?例如:
static int var_01 = fun();
Run Code Online (Sandbox Code Playgroud)
当我在VC6中使用它时它成功了.但它在GCC 4.6.1中失败了.这很奇怪.我猜这种用法在C89中是非法的?或其他原因造成这种情况?
在C99中,据我所知,在C89中,具有静态存储持续时间的对象的初始化程序必须是常量表达式或字符串文字,从草案C99标准部分6.7.8 初始化:
具有静态存储持续时间的对象的初始化程序中的所有表达式应为常量表达式或字符串文字.
并且函数调用不是常量表达式的6.6 常量表达式,它表示(强调我的):
常量表达式不应包含赋值,递增,递减,函数调用或逗号运算符,除非它们包含在未评估的子表达式中.98)
gcc产生同时使用相同的错误-std=c99,并-std=c89注意我也使用以下标志-Wall -Wextra -pedantic.
在Visual Studio编译器的现代版本中,这在C中不起作用(请参见实时),但在C++中这确实有效.因此,可能是您在Visual Studio中将其编译为C++.