繁体   English   中英

“static const char array”可以包含C语言变量的成员

[英]Can “static const char array” include a member of variable on C language

我的守则如下

#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]);
    }
}

这段代码正常用于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]’)

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

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

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

所以你不能使用的值a作为初始化为comb_ab

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

要修复C版本,你可以使comb_ab非静态并在main定义; 或者你可以在main中使用正确的值“初始化”全局comb_ab


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

您可以使用具有静态存储持续时间的对象地址作为常量表达式,代价是另一个间接层。 这在C中被正式称为地址常量 (C11,§6.6/ 9)。

#include <stdio.h>

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

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

int main()
{
    for (int i = 0; i < sizeof(comb_ab)/sizeof(comb_ab[0]); i++) {
        printf("%s\n", *comb_ab[i]);
    }
}

当然,将ab文字与数组合并会更简单。 考虑以下设计:

static const char *comb_ab[] =
{
    "this is a",
    "this is b",
};

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM