首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MISRA C 2012 21.1

MISRA C 2012 21.1
EN

Stack Overflow用户
提问于 2020-05-13 00:41:39
回答 2查看 316关注 0票数 0

保留标识符或保留宏名称不能使用#define#undef

我在此代码中违反了此规则

代码语言:javascript
复制
"#define _POSIX_C_SOURCE 200809L". 

_POSIX_C_SOURCE是宏的保留标识符。

这段代码的正式偏差是什么?

EN

回答 2

Stack Overflow用户

发布于 2020-05-13 01:37:43

是的,没错,这里违反了规则21.1。

规则21.1文本中的一点规定,不应使用以和下划线开头的标识符或宏名称。

票数 1
EN

Stack Overflow用户

发布于 2020-05-13 16:49:41

这不仅仅是MISRA违规,也是标准C违规。例如,请参阅C11 7.1.3:

  • 所有以下划线和大写字母或另一个下划线开头的标识符始终保留以供任何使用。

其中“保留供任何使用”是指为编译器/库实现保留的。

问题出在标识符的Glibc命名上。如果实现保证了这个标识符,那么您应该能够使用它。

但这里有一个问题:让Glibc MISRA兼容是不可能的任务。专业的MISRA-C实现不允许使用不兼容的库。

如果您仍然坚持使用这些库,则必须为整个标准库创建一些大规模的、项目范围内的偏差。这里的问题是,大量的Glibc代码依赖于gcc的非标准扩展,比如编写在库实现之外行为定义不佳的代码-为了编写不适用普通C规则的标准库。从MISRA-C的角度来看,您不可能认为这样的代码是可信的。

我会问在同一个项目中将POSIX、Glibc和MISRA-C组合在一起的人,从这里开始该如何进行……

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61757167

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档