【问题标题】:Variable may not have been initialized [MISRA 2012 Rule 9.1, mandatory]变量可能尚未初始化 [MISRA 2012 规则 9.1,强制性]
【发布时间】:2019-04-04 11:28:09
【问题描述】:

我有一个函数,它以秒为输入并将其转换为时间和日期。但是,我遇到有关数组变量“cumDaysInMonths”可能尚未初始化的警告[MISRA 2012 Rule 9.1,强制]。我已经初始化它,然后循环更新。警告在两条线上并链接。

初始化如下:

unsigned short cumDaysInMonths[MONTHS_IN_A_YEAR] = {0,31,59,90,120,151,181,212,243,273,304,334};

循环内的用法如下:

for(list_index = 2; list_index < MONTHS_IN_A_YEAR; list_index++)
{
    cumDaysInMonths[list_index]++;
}

我无法理解此警告的原因以及如何解决?

【问题讨论】:

  • 请提供显示实际警告的完整示例。如果您将它们按正确的顺序放置,那么您的两个 sn-ps 都可以。
  • MISRA 2012 规则 9.1 是强制性的吗?
  • 此代码与minimal reproducible example 相差甚远。缺少MONTHS_IN_A_YEARlist_index 的声明。我们也没有关于这两段代码在您的程序中的位置、时间或方式的上下文。你可以有一个全局数组,然后是一个同名的本地数组(错误地)。发布一个完整的程序,而不是两个脱节的sn-ps。
  • @MatthieuBrucher MISRA 是一种编码标准。 9.1 想要初始化变量。
  • @AreebTariq:这个警告是静态分析器发出的吗?

标签: c++ arrays initialization warnings


【解决方案1】:

这很可能是您的静态分析器中的一个错误,它在您提到的两行都检测到误报。
这是静态分析中的常见问题,甚至有一篇关于elimination of such false positives 的 IEEE 论文。

在右侧的相关问题中,我可以看到至少一个与MISRA C++ false positive warning 相关的问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-03-25
    • 2015-07-04
    • 1970-01-01
    相关资源
    最近更新 更多