静态代码分析器无法识别正在使用的 C int 类型
Static code analyzer not recognizing C int-types are being used
我在工作中的一个大型嵌入式系统项目中使用静态代码分析器 (C/C++)。目前,所有模块都有几个违规行为:
Typedefs that indicate size and
signedness should be used in place of the
basic types.
但是,我们定义了一个头文件 (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
据我所知,此代码是正确且可移植的 - 这只是误报,还是实施有问题?
编辑:我刚刚意识到实际上只有在使用指针时才会出现违规 - 我已经更新了示例模块代码以反映这一点。
我在 Semmle 工作,我可以确认这是我们工具中的误报 - 您的代码对我们来说没问题。
您看到的特定警报是我们为您的雇主及其编码指南提供的自定义分析查询。正如您所发现的,该特定查询有一个错误,当它们与指针类型一起使用时,它会忽略 'acceptable' 类型定义。感谢您提请我们注意 - 我们将修复查询。
我在工作中的一个大型嵌入式系统项目中使用静态代码分析器 (C/C++)。目前,所有模块都有几个违规行为:
Typedefs that indicate size and signedness should be used in place of the basic types.
但是,我们定义了一个头文件 (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
据我所知,此代码是正确且可移植的 - 这只是误报,还是实施有问题?
编辑:我刚刚意识到实际上只有在使用指针时才会出现违规 - 我已经更新了示例模块代码以反映这一点。
我在 Semmle 工作,我可以确认这是我们工具中的误报 - 您的代码对我们来说没问题。
您看到的特定警报是我们为您的雇主及其编码指南提供的自定义分析查询。正如您所发现的,该特定查询有一个错误,当它们与指针类型一起使用时,它会忽略 'acceptable' 类型定义。感谢您提请我们注意 - 我们将修复查询。