3

我在工作中的大型嵌入式系统项目(C/C++)上使用静态代码分析器。目前,所有模块都存在以下违规行为:

应该使用指示大小和符号的类型定义来代替基本类型。

但是,我们定义了一个头文件 (footypes.h),其中包含以下内容:

#ifdef LINUX_BUILD    
#include <inttypes.h>
#else
#ifdef VXWORKS_BUILD
#include <vxWorks.h>
#endif
#endif

typedef int8_t I8;
typedef uint8_t U8;
//etc

然后,模块中的实际代码如下所示:

#include <foo/footypes.h>

void bar(U8* foo){} //Violation given here
void bar(U8 foo){} //No violation given here

据我所知,这段代码是正确且可移植的——这只是误报,还是实现有问题?

编辑:我刚刚意识到,实际上只有在使用指针时才会给出违规行为——我已经更新了示例模块代码以反映这一点。

4

1 回答 1

3

我为 Semmle 工作,我可以确认这是我们工具中的误报 - 您的代码对我们来说看起来不错。

您看到的特定警报是我们为您的雇主及其编码指南提供的自定义分析查询。正如您所发现的,该特定查询有一个错误,当它们与指针类型一起使用时,它会忽略“可接受的”类型定义。感谢您提请我们注意 - 我们将修复查询。

于 2018-04-12T14:12:08.430 回答