"static const char array"可以在C语言中包含变量的成员

4 c c++ linux gcc

我的守则如下

#include <stdio.h>

static const char *a ="this is a";
static const char *b ="this is b";

char *comb_ab[2] =
{
    a,
    b
};

int main() {

    int i=0;

    for(i=0; i<sizeof(comb_ab)/sizeof(comb_ab[0]); i++) {
        printf("%s\n",comb_ab[i]);
    }
}
Run Code Online (Sandbox Code Playgroud)

这段代码正常用于G ++编译器(C++).但海湾合作委员会没有工作..产出如下

test.c:8:2: error: initializer element is not constant
  a,
  ^
test.c:8:2: error: (near initialization for ‘comb_ab[0]’)
test.c:10:1: error: initializer element is not constant
 };
 ^
test.c:10:1: error: (near initialization for ‘comb_ab[1]’)
Run Code Online (Sandbox Code Playgroud)

如何在gcc上的static const*char数组中包含变量的变量?请帮我!

M.M*_*M.M 6

在C中,静态存储持续时间对象的初始化程序必须是常量表达式.

变量的值永远不是常量表达式,即使它是一个const限定变量.

所以你不能使用a初始化器的值comb_ab.

在C++中,初始化程序可能具有运行时评估.

要修复C版本,您可以将comb_ab其设置为非静态并在内部定义main; 或者您可以在main其中comb_ab使用正确的值"初始化"全局代码.


您也有类型不匹配:您尝试使用const char *初始化char *.但即使你解决了这个问题,前一个问题仍然存在.使用g ++你应该有一个编译器诊断.