2013-02-15 95 views
2

我必须分配一个静态变量,我从一个函数中获取一个值。 我试着做了以下,但我得到的初始化元素不是恒定的。初始化元素不是一个常量

int countValue() 
{ 
return 5; 
} 

void MatrixZero() 
{ 

static int count=countValue(); 
count++; 
printf("count value %d \n",count); 

} 


int main() 
{ 
    MatrixZero(); 
    return 0; 

} 
+0

尝试使用C++编译器。请务必添加“#包括”。 C不允许用非常量初始化静态变量。 – 2013-02-15 20:06:08

+0

@RichardPennington这是C和C++是不同的语言。我不认为用C++编译器编译C程序是一个好建议。 – ouah 2013-02-15 20:07:22

+0

@ouah它在首次发布时未被标记为C.我只是指出了C和C++处理静态初始化器的方式上的差异。 – 2013-02-15 20:10:21

回答

10

因为......嗯......你的静态变量的初始值不是一个常量。它必须是一个不变的表达。试试这个:

static int count = SOME_VALUE_OUT_OF_RANGE; 
if (count == SOME_VALUE_OUT_OF_RANGE) { 
    count = countValue(); 
} 

检查它是否已经被初始化。

6

static存储说明符声明的变量必须用常量表达式进行初始化。

static int count=countValue(); 

函数调用不是一个常量表达式。

-1
// wenn countValue ein Objekt zurückgibt 

static int* count=0; if(count==0)count=countValue(); 
+0

请详细说明此代码如何回答问题。 – JAL 2016-03-25 20:17:54