问题标签 [qa-c]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
130 浏览

c - 如何在没有通用头文件的情况下共享数组类型定义?

情况

我正在使用 min GW 编译器:

我有两个头文件main.hsubmodule.h. 由于各种原因,我不能简单地将其中一个标题包含到另一个标题中。


[更新]

我认为您需要解释为什么不能简单地将其中一个标题包含到另一个标题中的各种原因,因为这是显而易见的答案... – Andrew

  • 我无法导入main.hsubmodule.h因为在这种情况下,更改main.h会触发子模块的重新编译,尽管此处没有任何更改。编译时间是我的客户关心的主要问题。

  • 我不能包括在内submodule.hmain.h因为submodule.h定义了很多东西,但只有少数定义是公开的。我的客户希望尽可能减少标识符的可见性。

  • 我的客户端使用 的内容main.h来验证目标软件不同版本的兼容性。上述数组的存在和大小是兼容性标准之一。因此数组的定义必须留在main.h

  • 有一些版本的目标软件根本没有子模块。因此,构建此子模块的文件可能存在也可能不存在。(对于我的客户)有很多开销来处理必须由其他人而不是我来完成的情况。所以我的客户也想限制“闪烁”文件的数量。


我还有很多其他*.h文件包含main.h但不包含submodule.h,它们不应该在子模块中隐藏一些东西。

submodule.h定义了很多在submodule.c. 其中包括数组类型定义和该类型的全局变量:

实现了这个submodule.c数组:

INDEX_TABLE其他*.h文件中使用的变量ist:

这些*.h文件包括main.h但不包括submodule.h.

INDEX_TABLE_t因此,我曾经添加和编译好的(完全相同的)类型定义INDEX_TABLE_tmain.h

问题

我的客户使用了一个代码 alaysis 工具 (QA-C),它抱怨 type 的双重定义INDEX_TABLE_t

客户指示我更改代码,以便代码分析工具不再发出此错误。

我通常通过将extern关键字添加到除一次之外的所有内容来解决此问题。但在这种情况下,编译器会抛出异常:

但是声明相等的(它们是基于模型呈现的)。

问题

我有机会让编译器和代码分析器都开心吗?

我唯一的选择是创建另一个要包含在main.h或所有其他文件中的头文件吗?*.h

0 投票
3 回答
4998 浏览

embedded - 是否可以在 QA-C 中抑制 MISRA 警告

我用了:

它适用于许多消息以抑制 QAC 警告,但此技术不适用于 Message No 434。我们是否有任何其他方法来抑制这些 QAC 警告。

0 投票
1 回答
1328 浏览

c - C 编程:将二维数组作为 const 函数参数传递时如何消除 QAC 警告?

我想将一个二维数组传递给一个函数,并且该数组的值不会在该函数中被修改。所以我正在考虑这样做:

但是,当我启用深度 5 QAC 设置时,它给了我 QAC 错误,因为我输入的是上面的代码注释:

如果我删除const函数声明和定义中的 ,那么函数就像:

这个错误会消失,但会有另一个错误说:

那么如何解决这个困境呢?我不能在 main 函数中将 ai_Array 定义为 const 数组,因为其他一些函数可能仍想修改该值。另外,我正在寻找在函数中仍然保持双括号(无需将行大小和列大小作为单独的参数传递)的解决方案,而不是将其视为一维数组。

0 投票
1 回答
873 浏览

c++ - “float = float - float”中是否存在隐式类型提升?

我们正在使用 QA-C 来实现 MISRA C++ 一致性,但该工具会针对如下代码显示错误:

据我了解,这没有隐式类型提升,因为一切都将发生在 -float大小的块中,但该工具告诉我减法会导致一个。是否存在可能存在隐式提升的情况?

0 投票
0 回答
92 浏览

c++ - 标准::地图来自 MISRA C++ 的 ::find() 警告

我们有以下代码:

这会在应用 MISRA C++ 2008 规则时从 QA-C 代码检查器中产生以下错误,突出显示msg_id有问题的标记:

05-0-03 复合式が暗黙的に异なる复型へ変换されています。</p>

或者用英语:

复杂表达式被隐式转换为不同的内在类型。

根据此处的PDF,更全文是:

cvalue 表达式不应隐式转换为不同的基础类型

但是,实现std::map::find()只是:

key_type应该在哪里uint8_t。这是工具中的错误,还是我遗漏了什么?

gcc请注意,该工具显然使用当前安装的 5.4.0。

0 投票
2 回答
379 浏览

c++ - 将指向 X 的指针转换为 X 的数组

“不!” 是正确的答案,但不幸的是它不是我需要的。

如果我做:

这都是完全合法的,但我的 MISRA C++ 代码检查器在 上给出了错误 5-0-15 foo[42],它表示“数组索引应该是指针算术的唯一形式”。这个问题实际上之前已经被问过,但是问题和答案错过了一个关键问题,即文档进一步指出:

数组索引只能应用于定义为数组类型的对象。

如果您查看文档(通过搜索“misra c++ 2008 pdf”可以找到可疑的盗版副本),它有一个类似于以下内容的示例:

因此,基本上代码检查工具将声明与用法相匹配。有没有办法将指针转换为数组?


在我们的真实示例中,我们使用的是 OpenCV uchar *cv::Mat::ptr(),因此我们不能只保留一个足够大的数组。

0 投票
0 回答
1279 浏览

c - 如何解决多空间警告“数组索引超出范围

在对代码库进行多空间分析时,我在下面的代码片段上收到一个橙色检查警告,指出指针可能超出其范围。

我尝试在访问 if( x[i] != NULL) 之类的数组之前添加一个空检查,但这没有帮助。作为参数传递给函数的指针也被声明为指针,所以我无法确定传递给函数的缓冲区大小。

我可以理解 polyspace 可能会假设在某个时间点,指针可能指向无效的内存并且代码可能会崩溃,但是如何更干净地编写代码以避免问题呢?我无法更改指针的使用,因为它对大文件有影响。

0 投票
2 回答
636 浏览

c - 以下c代码有什么问题?MISRA 质量警告信息

我收到以下代码示例片段的 MISRA QAC 警告。那就是“控制表达式的值不是从显式逻辑运算中派生的”。

很明显,没有将返回值分配给变量的评估已经完成。此质量警告的确切原因是什么?

文件.c

0 投票
1 回答
499 浏览

c - PRQA QAC 在遇到#error 指令后终止

我是 QAC 的新手,我正在尝试在我的项目中设置 QAC。我目前在尝试对文件运行 QAC 时遇到此错误。

C:\Program Files (x86)\IAR Systems\Embedded Workbench 8.2\arm\inc\c\intrinsics.h @@@ 26 @@@ 869 @@@ [Q] '#error' 指令:“未知编译器内在版本" 分析因 '#error' 指令而终止。@@@ 9

我已将编译器个性文件设置为不包含上述文件夹中的警告,但我仍然看到此错误。请帮助解决这个问题。

0 投票
1 回答
135 浏览

gitlab - CI 与 QAC + Gitlab / 集成

我正在尝试将 QAC 静态分析检查集成到 Gitlab CI 工作流程中(如果需要,我可以添加 Jenkins),但我没有找到任何指南/材料。有没有人试图集成 Gitlab CI 和 PRQA/QAC?

谢谢