c - MISRA C 2012 21.1
问题描述
#define
并且#undef
不得用于保留的标识符或保留的宏名称。
我违反了此代码的此规则
"#define _POSIX_C_SOURCE 200809L".
_POSIX_C_SOURCE
是宏的保留标识符。
此代码的正式偏差是什么?
解决方案
这不仅是 MISRA 违规,也是标准 C 违规。参见例如 C11 7.1.3:
- 以下划线和大写字母或另一个下划线开头的所有标识符始终保留用于任何用途。
其中“保留用于任何用途”是指为编译器/库实现保留。
问题在于标识符的 Glibc 命名。如果实现支持此标识符,那么您应该能够使用它。
但这里有个问题:让 Glibc MISRA 兼容是不可能完成的任务。并且专业的 MISRA-C 实现不允许使用不兼容的库。
如果您仍然坚持使用这些库,则必须为整个标准库创建一些大规模的、项目范围的偏差。这里的问题是,大量的 Glibc 代码依赖于 gcc 非标准扩展,例如编写在库实现之外具有不良定义行为的代码——为了编写一个标准库,而普通 C 规则没有不适用。从 MISRA-C 的角度来看,您不可能提出这样的代码值得信任的论点。
我会问打电话在同一个项目中结合 POSIX、Glibc 和 MISRA-C 的人如何从这里继续......
推荐阅读
- c# - 禁用对角线移动
- go - Intellij 在项目中找不到模块
- awk - 将毫秒添加到日志文件时间戳
- kubernetes - 在 EKS 上使用 Istio 时,如何限制创建的安全组规则中的 IP?
- ios - 如何在 Xcode Simulator 中修复此图像大小?
- javascript - 光滑的滑块显示堆叠的幻灯片
- typescript - 使用默认值解构后的“对象可能为空”
- dart - Flutter Bottom Sheet:当用户与工作表交互时如何改变高度
- python-3.x - 如何在python中为aws boto3 ec2专用主机过滤字典数据
- python - 如何创建一个 3D (shape=m,n,o) 数组,其中包含沿特定(第三)轴的数组,索引由 2D 数组(shape=m,n)给出?