加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

C:const结构数组中的外部const int

发布时间:2020-12-16 09:27:07 所属栏目:百科 来源:网络整理
导读:当初始化具有外部常量整数的结构数组时,我收到错误消息“表达式必须具有常量值”. FILE1.C: const unsigned char data1[] ={ 0x65,0xF0,0xA8,0x5F,0x31,0x32,0x2E,0xF1,0x63,0x4D,0x43,0x52,0x45,0x41,0x54,0x44,0x20,0x42,0x59,0x3A,0x69,0x73,0x70,0x56,/
当初始化具有外部常量整数的结构数组时,我收到错误消息“表达式必须具有常量值”.

FILE1.C:

const unsigned char data1[] =
{
    0x65,0xF0,0xA8,0x5F,0x31,0x32,0x2E,0xF1,0x63,0x4D,0x43,0x52,0x45,0x41,0x54,0x44,0x20,0x42,0x59,0x3A,0x69,0x73,0x70,0x56,// ...
};
const unsigned int data1_size = sizeof(data1);

file2.c中:

const unsigned char data2[] =
{
    0x20,0x61,0x74,0x6F,0x77,0x3D,0x34,0x38,0x12,//...
};
const unsigned int data2_size = sizeof(data2);

Get_Byte.c:

extern const unsigned char * data1;
extern const unsigned int    data1_size;
extern const unsigned char * data2;
extern const unsigned int    data2_size;

struct Array_Attributes
{
    const unsigned char *    p_data;
    const unsigned int       size;
};

const struct Array_Attributes Data_Arrays[] =
{
    {data1,data1_size},// Error message is for data1_size here.
    {data2,data2_size},// Another error message generated for data2_size here.
};

我还从Array_Attributes的size字段中删除了const限定符,并获得了相同的错误消息.

当data1_size和data2_size是const unsigned int但是在不同的转换单元中时,为什么编译器会抱怨常量值表达式?

我想要一个在编译时生成的[数组地址,数组大小]的常量数组.

我使用的是Green Hills ccarm 4.24,在Windows XP上,C语言不是C.

解决方法

在这种情况下,C的const限定符与编译器认为的常量表达式几乎没有关系.在初始化器中,即

const struct attributes attrs[] = {
    { expr1,expr2 },...
}

expr1和expr2必须具有非常特定的形式才能被编译器接受.这些限制的结果是可以在不从程序变量获取的情况下评估表达式,因为这些在编译时不存在.

您正在尝试使用data1_size和data2_size,这些规则不是编译时常量.

顺便说一句,声明

const unsigned char data1[] = { ... };

extern const unsigned char *data1;

不兼容,将导致您的代码中的错误.后者应该是

extern const unsigned char data1[];

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读