我的程序使用cc编译,但是当我使用$ gcc -pedantic -Wall -ansi -O4编译时,会收到警告,提示我不明白:

miniShell.c: In function ‘main’:
miniShell.c:144:24: warning: initializer element is not computable at load time [enabled by default]
                 struct command cmd[] = { {printenv}, {sort}, {less} };


以上是什么意思?我在这些变量的主要变量顶部声明:

        char *printenv[] = { "printenv", 0};
        char *sort[] = { "sort", 0 };
        char *less[] = { "less", 0 };
        struct command cmd[] = { {printenv}, {sort}, {less} };


我有一个用于命令的全局变量。

struct command
{
    char * const *argv;
};

最佳答案

printenv的值在运行时会有所不同。程序的后续执行可能会发现该数组的位置发生了变化。

在C89中,初始化器列表的元素必须是恒定的编译时表达式。哪个不是。

在C99及更高版本中,此限制得到了放松。您可以使用-std=c99-std=c11启用它

关于c - 我的编译器错误是什么意思?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30283081/

10-13 06:16