我正在尝试在Windows平台上读取环境变量。 我将变量设为全局变量,因为我打算通过各种函数使用它。 这就是我试过的
#include <stdlib.h>
#include <malloc.h>
#include <string.h>
char* devset = getenv("DEVSET"); //1 for debugging, 0 for normal execution
我收到错误
C:\Users\Prateek\Documents\Script Parser\main.c|6|error: initializer element is not constant
我在main中尝试了同样的事情,它编译了,我没有得到任何错误。 但是这样我将需要将环境变量作为参数传递给所有函数。 是否有另一种方法可以使环境变量全局可访问? 任何帮助表示赞赏。
答案 0 :(得分:3)
问题不在于读取环境变量,而在于您执行此操作的位置。您的代码在静态初始化程序中读取变量,这是不允许的:只能在那里使用编译时常量。
然而,这样我将需要将环境变量作为参数传递给所有函数
不,您不会:将变量保留在全局范围内,并将代码移至main
以解决问题:
char* devset;
int main(int argc, char *argv[]) {
devset = getenv("DEVSET"); //1 for debugging, 0 for normal execution
....
return 0;
}
答案 1 :(得分:2)
在函数外部初始化的任何全局变量都必须具有常量初始值设定项。也就是说,必须在编译时知道初始化的值。
但是在这里你试图调用getenv("DEVSET")
,你不能在编译时这样做。
相反,将初始化放在main中:
#include <stdlib.h>
#include <malloc.h>
#include <string.h>
char* devset;
int main() {
devset = getenv("DEVSET");
// Your code here
}
答案 2 :(得分:0)
getenv
是一个以char*
为参数的函数。您正尝试在全局范围内调用函数。这是不可能的。只需使用
char* devset;
在全球范围内和
devset=getenv("DEVSET");
来自main
。