错误:表达式必须具有常量值

use*_*807 4 c arrays compiler-errors constants

我需要一些帮助来找到如何解决此错误。

typedef struct {
    const char *iName;
    const char *iComment;
} T_Entry;

const T_Entry Menu_PowerSupply = { "PWRS", "Power supply"};

static const T_Entry G_Commands[] = {
    { "MEM", "Memory"},
    {Menu_PowerSupply.iName,Menu_PowerSupply.iComment},
    { "SYS", "System"}
};
Run Code Online (Sandbox Code Playgroud)

我收到错误:表达式必须具有常量值 我该如何解决这个问题?

对我来说,链接时间是已知的,并且位于具有固定值的固定地址:我错了吗


我的目的是将以下代码放入库中

const T_Entry Menu_PowerSupply = { "PWRS", "Power supply"};
Run Code Online (Sandbox Code Playgroud)

以下也不起作用

static const T_Entry G_Commands[] = {
    { "MEM", "Memory"},
    Menu_PowerSupply,
    { "SYS", "System"}
};
Run Code Online (Sandbox Code Playgroud)

如果有人可以帮助我理解这个非常量值......

Yu *_*Hao 5

错误是因为全局变量的初始值设定项必须是常量表达式,但即使Menu_PowerSupply定义为const,它也不是常量表达式。

这类似于:

const int n = 42;
int arr[n]; 
Run Code Online (Sandbox Code Playgroud)

无法在 C89 中编译,因为n不是常量表达式。(它在 C99 中编译只是因为 C99 支持 VLA)