c - 无法识别溢出,p 未打印警告

标签 c

我的小 C 程序有问题。

如果发生溢出,我试图打印出警告,我正在使用limits.h库来识别INT_MAX的溢出。 我猜问题出在我的 if 循环中,但我无法真正找到问题......

#include<stdio.h>
#include<limits.h>

int main()
{
    int x = 1627964;
    int y = 9;

    for(int i=1; i<y; ++i){
        x*= i; // x= x * i
        printf("%d * %d \n",x , i+1);
        if(x >= INT_MAX){
            printf("An Overflow has occured!\n");
            return 0;
            break;
        }
    }
}

我认为与 7 相乘后会发生溢出:

1627964 * 2
3255928 * 3
9767784 * 4
39071136 * 5
195355680 * 6
1172134080 * 7
-384996032 * 8
1214999040 * 9

我真的不知道为什么警告没有打印出来......

如果能提供一些帮助,我们将不胜感激,谢谢:)

最佳答案

只有 unsigned int 定义了溢出行为,signed int 没有,因此编译器如果检测到它可能会丢弃一半的代码。无论如何,在你的代码中 int 永远不会大于 INT_MAX 因为溢出时它应该是负值。

关于c - 无法识别溢出,p 未打印警告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40750355/

相关文章:

c - 错误代码如何返回给用户程序?

c - 链表 vector 无法正常工作

c - 如何在内核源代码中使用函数?

c - 使用 fscanf_s 时发生访问冲突

c++ - 从 C++ 调用 FORTRAN 库的问题

C中字符数组赋值错误

copy_to_user 不工作 - 我错在哪里?

C:在函数调用上传递参数时的类型转换

c - 结构的 qsort