加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

C中是否有完整的实现定义行为列表?

发布时间:2020-12-16 03:19:12 所属栏目:百科 来源:网络整理
导读:我回答了对我的回答的评论: C job interview – casting and comparing,发现我找不到C认为“实施定义的行为”的完整列表.我知道这类事情有3个类别:未定义的行为,实现定义的行为和未指定的行为;然而,似乎大多数讨论都围绕未定义的行为,并且当讨论实现定义的
我回答了对我的回答的评论: C job interview – casting and comparing,发现我找不到C认为“实施定义的行为”的完整列表.我知道这类事情有3个类别:未定义的行为,实现定义的行为和未指定的行为;然而,似乎大多数讨论都围绕未定义的行为,并且当讨论实现定义的行为时,最多给出一个例子.一般来说,我倾向于编写很多代码来捕获这个区域,我知道会发生什么样的行为;我仍然希望能够对其有效性发表评论.我还想抛弃那里,我认为操作社区中有很多误诊是未定义的,而实际上它们是由平台很好地定义的.

请注意,我对给定平台如何选择定义此类行为并不感兴趣,而是对包含C标准定义的“实现定义”类别中的所有行为的列表感兴趣.

解决方法

标准本身定义了实现定义行为的所有情况,draft C++ standard在最后有一个实现定义的行为索引,它提供了主题以及主题所针对的页面,例如:

additional formats for time_get::do_get_date,689

alignment,76

alignment additional values,76

事实上,每个编译器都应记录所有实现定义的行为以及它如何处理它们.例如,这里是gcc’s C++ Implementation-defined behavior section和gcc’s C Implementation-defined behavior.据我所知,C标准与C99草案标准不同,为未指定或未定义的行为提供了参考.因此,您将不得不求助于在文档中搜索未定义和未指定的查找所有实例.

C99 draft standard分别为附件J.1,J.2和J.3中的未指定,未定义和实现定义的行为提供了参考.

重要的是要注意,未定义的行为可以由实现定义,但它们必须记录它.在您的具体示例中,它看起来确实违反了strict aliasing rules,但是自C89以来,您使用类型惩罚的替代建议已明确定义.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读