为什么 C return 在我使用大整数时不报错

Why doesn't C return an error when I use a large int

你好,我正在学习 C,我相信我在声明时犯了一个错误 signed int testing=4294967295; 我认为这行不通,因为虽然我知道我可以创建那个大小的无符号整数,但我认为有符号整数的范围是 -2,147,483,648 到 2,147,483,647,因此我预计会出现溢出错误,但我没有得到一个。有人可以告诉我为什么会这样吗?

signed int 溢出导致未定义的行为。编译器可能会也可能不会产生任何警告或错误。

C11: 3.4.3 (p3):

An example of undefined behavior is the behavior on integer overflow

溢出不是错误。这只是int的一种行为。我想在您的情况下,当发生溢出时,您的 int 值与您设置的值不同。

尝试打印 int 值。根据您的设置和硬件,可能会发生很多事情,但您会看到一些奇怪的行为。

C 标准规定:

If an exceptional condition occurs during the evaluation of an expression (that is, if the result is not mathematically defined or not in the range of representable values for its type), the behavior is undefined.

这意味着如果您遇到溢出,那您就倒霉了——无法保证任何类型的行为。无符号类型是一种特殊情况,永远不会溢出。