用函数的参数初始化静态变量

时间:2018-11-28 15:51:06

标签: c function static initialization

我该怎么做?

void function(int n)
{
    static int number = n;
    .
    .
    .
}

2 个答案:

答案 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仅在运行时才知道。