溢出未被识别,p未打印警告

时间:2016-11-22 19:45:09

标签: 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

我无法告诉为什么警告没有打印出来......

非常感谢一些帮助,谢谢:)

3 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

如果你尝试int max / i&lt; x为溢出?

答案 2 :(得分:-3)

x == INT_MAX仅测试x 完全相等INT_MAX。不少于,不多于,完全相同

你应该测试的是有符号整数溢出,当你乘以1627964乘以8时会发生这种情况:if (x==INT_MAX || x < 0) - 符号位递增,这会使你的值为负。