c - Polyspace 发出关于系统函数使用系统定义参数标志的警报
问题描述
我正在使用 Polyspace Code Prover 和 Bug Finder 对我用 C 编写的 Linux 应用程序执行静态分析。
我们收到了几个关于使用上述调用的“手册”页定义的标志的警报。在 open()、write() 或 syslog() 等函数的手册页中,我们可以看到它们有一个参数,我们可以将其作为接口定义的多个标志的 OR 传递,如下例所示:
fd_value = shm_open(shm_key, O_CREAT | O_RDWR | O_EXCL , S_IRWXU);
Polyspace 抱怨说,在上面的示例中,标志O_CREAT
和O_RDWR
是O_EXCL
不同的基本类型(一些无符号,一些有符号),因此不建议使用这种 OR 操作。根据 MISRA 的 10.1 指南,这是正确的,但如果这是系统定义其 API 及其值的方式,我能做些什么呢?在我看来,仅仅为了让工具快乐而铸造价值是有风险的。
除了为这些违规行为辩护之外,还有其他方法可以解决这个问题吗?
谢谢您最好的问候!
解决方案
这些值是用不同的符号定义的,这有点奇怪。添加一个平台隔离层可能是个好主意,它将这些常量重新定义为特定于模块的常量,执行必要的转换并可能处理跨平台差异。
typedef int t_my_shm_open_flags;
#if(defined(PLATFORM1))
#define MY_SHM_OPEN_FLAG_CREATE ((t_my_shm_open_flags) O_CREAT)
#define MY_SHM_OPEN_FLAG_READ_WRITE ((t_my_shm_open_flags) O_RDWR)
#define MY_SHM_OPEN_FLAG_EXCLUSIVE ((t_my_shm_open_flags) O_EXCL)
#else
/* error for unsupported platform */
#endif
#define MY_SHM_OPEN_DEFAULT_FLAGS (MY_SHM_OPEN_FLAG_CREATE | MY_SHM_OPEN_FLAG_READ_WRITE | MY_SHM_OPEN_FLAG_EXCLUSIVE)
推荐阅读
- python - 在 Web 服务器上运行时,Paramiko SSH 失败并显示“Server '...' not found in known_hosts”
- html - 试图在页眉和页脚之间居中登录表单
- angular - Jasmine 中的模拟服务 - 内部参数
- html - 自动引用模板中的组件?
- android - Gradle 无法解析未请求的版本
- python - 通过 Django 读取 xlsx 上传
- python - Python 文件 I/O:无法创建文件
- javascript - 如何为变量添加过滤器
- arrays - 哪个性能更好:在运行时确定的动态数组与 VBA 中的类结构?
- angular - 是什么导致无法执行“createObjectURL”错误?