我在工作的大型嵌入式系统项目(C / C ++)上使用静态代码分析器。目前,所有模块都有以下几种违规行为:
表明大小和的Typedef 签名应该用来代替 基本类型。
但是,我们定义了一个头文件(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
据我所知,这段代码是正确且可移植的 - 这只是误报,还是实施有问题?
编辑:我刚才意识到违规行为实际上只是在使用指针时才给出 - 我更新了示例模块代码以反映这一点。
答案 0 :(得分:1)
我为Semmle工作,我可以确认这在我们的工具中是误报 - 您的代码对我们来说很好。
您所看到的特定提醒是我们为您的雇主提供的自定义分析查询及其编码指南。正如您所发现的那样,该特定查询存在一个错误,使其忽略了“可接受的”错误。 typedef与指针类型一起使用时。感谢您引起我们的注意 - 我们将修复查询。