gpt4 book ai didi

c - 初始化字符数组和 MISRA 错误

转载 作者:太空宇宙 更新时间:2023-11-04 02:58:48 34 4
gpt4 key购买 nike

我有以下行(减少到最低限度地展示问题):

char version_text[64U] = {'\0'};

此行生成以下 MISRA 错误:

Error[Pm023]: missing elements - braces shall be used to indicate and match the structure in the non-zero initialization of arrays and structures (MISRA C 2004 rule 9.2).

为什么这是一个错误?

我目前的解决方法是:

char version_text[64U] = {0};

这表明 char 类型被我的编译器 (IAR EW) 实现为 signed char

我的理解是 '\0' 是一个字 rune 字,因此应该匹配 char 类型。

最佳答案

在 C 语言中,整数字符常量的类型为 int,而不是 char。所以

char version_text[64U] = { '\0' };

char version_text[64U] = { 0 };

是完全等价的(这与 char 的符号无关)。两者都提供一个 int 常量作为唯一的初始化器。

MISRA 检查器提示第一个,而不是第二个,这只是一种不一致。

然而,这可能是由于零初始化通常只提供一个 0,而使用整数字符常量通常只用于非零初始化 - 其中 MISRA期望所有元素的初始化程序,如果我正确地解释消息,并且检查器只是不查看字符常量。

关于c - 初始化字符数组和 MISRA 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14409644/

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