C中是否有完整的实现定义行为列表?
我回答了对我的回答的评论:
C job interview – casting and comparing,发现我找不到C认为“实施定义的行为”的完整列表.我知道这类事情有3个类别:未定义的行为,实现定义的行为和未指定的行为;然而,似乎大多数讨论都围绕未定义的行为,并且当讨论实现定义的行为时,最多给出一个例子.一般来说,我倾向于编写很多代码来捕获这个区域,我知道会发生什么样的行为;我仍然希望能够对其有效性发表评论.我还想抛弃那里,我认为操作社区中有很多误诊是未定义的,而实际上它们是由平台很好地定义的.
请注意,我对给定平台如何选择定义此类行为并不感兴趣,而是对包含C标准定义的“实现定义”类别中的所有行为的列表感兴趣. 解决方法
标准本身定义了实现定义行为的所有情况,draft C++ standard在最后有一个实现定义的行为索引,它提供了主题以及主题所针对的页面,例如:
事实上,每个编译器都应记录所有实现定义的行为以及它如何处理它们.例如,这里是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以来,您使用类型惩罚的替代建议已明确定义. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |