相关疑难解决方法(0)

有符号整数溢出是否定义了未定义的行为或实现?

#include <limits.h>

int main(){
 int a = UINT_MAX; 
 return 0;
}
Run Code Online (Sandbox Code Playgroud)

我这个 UB 或实现定义?

链接说它的 UB

https://www.gnu.org/software/autoconf/manual/autoconf-2.63/html_node/Integer-Overflow-Basics

允许 C/C++ 中的有符号整数溢出

链接说它的实现定义

http://www.enseignement.polytechnique.fr/informatique/INF478/docs/Cpp/en/c/language/signed_and_unsigned_integers.html

转换规则说:

否则,新类型是有符号的,值不能在其中表示;要么结果是实现定义的,要么引发实现定义的信号。

我们不是将 a 转换max unsigned value为 asigned value吗?

我所看到的方式,gcc 只是截断了结果。

c undefined-behavior implementation-defined-behavior

3
推荐指数
1
解决办法
138
查看次数