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

前端之家收集整理的这篇文章主要介绍了C中是否有完整的实现定义行为列表?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我回答了对我的回答的评论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 sectiongcc’s C Implementation-defined behavior.据我所知,C标准与C99草案标准不同,为未指定或未定义的行为提供了参考.因此,您将不得不求助于在文档中搜索未定义和未指定的查找所有实例.

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

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

原文链接:https://www.f2er.com/c/111847.html

猜你在找的C&C++相关文章