我该怎么做?
void function(int n)
{
static int number = n;
.
.
.
}
答案 0 :(得分:3)
你不能。
引用C11
标准,第§6.7.9/ P4
具有
static
或线程存储持续时间的对象的初始化程序中的所有表达式 应该是常量表达式或字符串文字。
为了详细说明,在执行程序之前,仅将存储时间为static
的对象初始化一次。因此,不可能将运行时值用作显式初始化程序。
相关,见第6.2.4章
使用存储类将其标识符声明为[...]的对象 说明符
static
具有静态存储期限。它的生命周期是 程序及其存储值在程序启动之前仅初始化一次。
答案 1 :(得分:3)
如果您想在函数的第一次调用期间将静态变量初始化为n
,则可以这样做:
void function(int n)
{
static int initialized = 0;
static int number;
if (!initialized) {
number = n;
initialized = 1;
}
.
.
.
}
您不能直接将number
初始化为n
,因为number
是在编译时初始化的,而n
仅在运行时才知道。