gpt4 book ai didi

c - c程序在arm平台编译时报错

转载 作者:行者123 更新时间:2023-11-30 15:23:32 25 4
gpt4 key购买 nike

在arm平台上编译简单的c程序。

typedef struct
{
char* Case;
int RespCmdLen;
unsigned char *RespCommand;

}ResponseStruct;
int main()
{
unsigned char CommandResp[] = {
0x01,
0x08, 0x07,
0x05, 0x00,
0x00,
0x00,
0x0B,
0x00,
0x00,
};
ResponseStruct CaseRespTbl[] =
{
/* case, Response length, response buffer pointer */
{ "case1", sizeof(CommandResp), CommandResp},
};

return 0;
}

并出现错误,例如

Error:  #24: expression must have a constant value
{ "case1", sizeof(CommandResp), CommandResp},
^

但是如果我将该代码更改为

ResponseStruct CaseRespTbl[10];
CaseRespTbl[0].Case = "case1";
CaseRespTbl[0].RespCmdLen = sizeof(CommandResp);
CaseRespTbl[0].RespCommand = CommandResp;

然后编译就没有任何问题了。

有什么理由吗?

最佳答案

假设命令响应是恒定的,我会简单地放弃它并使用:

ResponseStruct CaseRespTbl[] = {
# Case Sz Bytes
{ "case1", 10, "\x01\x08\x07\x05\x00\x00\x00\x0b\x00\x00" },
};

您仍然可以使用sizeof如果需要,可以将最终字符串放入 #define ,类似:

#define CMD_RESP "\x01\x08\x07\x05\x00\x00\x00\x0b\x00\x00"
ResponseStruct CaseRespTbl[] = {
# Case Sz Bytes
{ "case1", sizeof(CMD_RESP)-1, CMD_RESP },
};

但对于不经常更改的数据来说,这可能没有必要。

关于c - c程序在arm平台编译时报错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28764716/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com