【发布时间】:2014-07-22 19:54:35
【问题描述】:
我使用这篇文章Undefined Behavior and Sequence Points 来记录 C 程序中未定义的行为(UB),并指出C and C++ have their own divergent rules for this [sequence points]。那么C和C++在序列点和相关UB上有什么区别呢?我不能用一篇关于 C++ 序列的帖子来分析 C 代码中发生的事情吗?
* 当然我不是在说C++ 的功能不适用于C。
【问题讨论】:
-
我认为实际上没有任何区别?
-
@πάνταῥεῖ 有。实际上,其中很多。
-
你可能是对的,但是通过 c++ 到 c 保证的兼容性,实际上不应该有太大的差异。
-
@πάνταῥεῖ 一旦我们开始谈论 UB,就会有惊人数量的差异,我只能代表我直接写过的那些,例如 C has always made it clearly UB to use indeterminate values while C++ until only recently did,我们也可以看到在how C and C++ deal with type punning through unions.
-
@ShafikYaghmour 好吧,说得好。但是恕我直言,如何实际处理 UB(从不同的上下文中)是无关紧要的。 UB 就是 UB,不管是因为缺少 c99 还是 c++11 合规问题触发的。
标签: c++ c language-lawyer undefined-behavior sequence-points