【发布时间】:2018-11-03 17:32:01
【问题描述】:
我正在尝试使用从文件中获取所述值的方法为我的#define 分配一个值。 我能够从文件中获取值并将其返回给 main 方法。定义能够调用它并初始化它,但是当另一个方法使用所说的定义时,我得到这个错误“初始化元素不是常数” 我尝试将方法设置为 const int 但没有成功。我该怎么做才能解决这个问题?
代码示例:
#define VALUE getValue()
int getValueFromFile(){
File *fp;
int value;
if((fp = fopen("configFile.txt","rt")) != NULL){
fscanf(fp,"value=%d\n",&value);
fclose(fp);
return value;
}else{
return -1;
}
int getValue(){
int value;
if((value=getValueFromFile()) != -1){
return value;
}else{
return 10;
}
然后当我尝试使用它时
static unsigned long int testValue = (unsigned long int) VALUE;
我收到错误“初始化元素不是常量”
好的,所以#define 不好。我正在尝试使用全局变量,但错误现在更改为“错误:可变修改----在文件范围内” 全局变量不是静态的。 我该怎么办?
【问题讨论】:
-
你能发布一些代码示例吗?
-
没有任何要调试的代码,我们无法帮助调试代码。
-
您应该显示一些代码来说明问题 - MCVE (minimal reproducible example)。但是,您只能在初始化程序中将函数调用用于自动变量,而不能用于文件范围内的变量或函数内的
static。 -
花了一些时间,但这是我的问题的一些代码示例
-
编辑后问题就很清楚了。在 C 中,您不能通过调用函数来初始化全局变量。在您的情况下,
static unsigned long int testValue = (unsigned long int) VALUE;与static unsigned long int testValue = (unsigned long int) getValue();相同
标签: c variables unix global initializer