【发布时间】:2012-09-22 09:39:10
【问题描述】:
在溢出标志的情况下,访问这个标志似乎对跨架构编程来说是一个巨大的福音。它将提供一种安全的替代方法来依赖未定义的行为来检查有符号整数溢出,例如:
if(a < a + 100) //detect overflow
我确实了解有安全的替代方案,例如:
if(a > (INT_MAX - 100)) //detected overflow
但是,C 和 C++ 语言似乎都缺少对状态寄存器或其中的各个标志的访问。为什么不包含此功能或做出了哪些语言设计决定禁止包含此功能?
【问题讨论】:
-
C 和 C++ 本来就是可移植的。并非所有处理器都具有相同的 CPU 状态寄存器。
-
SSE 操作没有溢出标志。允许编译器使用 SSE 指令来实现。
-
无关紧要。就可移植性而言,是否有没有没有标志的 CPU 并不重要。只有可以或不能建造它们才有意义。
-
在 C 最初设计的时候,还有其他事情。就像使用补码、符号和绝对值以及其他特性来实现有符号算术的 CPU 一样。所有这些都有完全不同的溢出语义。
-
@Timesquare “最初设计 C 时,没有可用的 SSE 指令” - 没错!在硬件以几秒钟的速度发展的时代(故意夸大其词),您不想要一种仅适用于当今硬件的语言。便携也意味着未来的证明。所以你可以说它确实影响了决定,即使不是直接影响。
标签: c++ c language-design