我在工作中的大型嵌入式系统项目(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
据我所知,这段代码是正确且可移植的——这只是误报,还是实现有问题?
编辑:我刚刚意识到,实际上只有在使用指针时才会给出违规行为——我已经更新了示例模块代码以反映这一点。