c - 从方法中设置#define 值
问题描述
我正在尝试使用从文件中获取所述值的方法为我的#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 不好。我正在尝试使用全局变量,但错误现在更改为“错误:可变修改----在文件范围内”全局变量不是静态的。我应该怎么办?
解决方案
可能对“ #define
”是什么有误解。它是一个预处理器指令,这意味着在编译源代码之前,它由预处理器修改,然后将其交给编译器。
就像#include
几乎字面上将文本复制并粘贴到源文件的该位置一样,#define
让预处理器将标签标记为等于某些文字、宏等,并简单地用给定值替换该标签的所有实例。
在您的情况下,预处理器值肯定不能在运行时“设置”。您可能需要一个不const
被设置和使用的全局变量。
请记住,依赖这些(在大多数情况下)是不好的形式,并考虑需要做多少工作才能避免它。
推荐阅读
- c++ - VisualStudio 2019 升级 - 使用连续字符串编译错误
- c++ - 需要停止线程并从线程例程本身加入
- angular - 如何在angular 9+中隐藏console.log生产
- pine-script - 反转上下文/找到峰值而不是低谷
- keycloak - 使用外部 Keycloak 服务器运行 Keycloak 测试套件时失败
- python - pyodbc MERGE INTO 错误:HY000:驱动程序未提供错误
- flutter - 在 Flutter 中使用“弃用代码”的后果是什么?
- javascript - 如何 console.log 来自 TikTok API 的响应?
- regex - 正则表达式删除重复的单词或短语 NO 以逗号或句点分隔
- plot - 绘制日内股票价格