在下面的程序中,我们如何使编译器在算术表达式存在问题时发出警告/错误?
如果算术表达式的结果超过其类型的最大值,我希望编译器发出警告/错误。
我使用的编译器是
通过将
如果算术表达式的结果超过其类型的最大值,我希望编译器发出警告/错误。
我使用的编译器是
gcc(GCC)4.8.5 20150623(Red Hat 4.8.5-4)
,使用的编译命令是gcc int_promo_flags.c -Wall -Wextra
我期望从代码行long long int y = x + INT_MAX;
中得到一个警告/错误,但没有报告任何错误/警告。通过将
x
强制转换为(long long) x
,我们可以使表达式产生正确的值。
但是否有编译器标志可以在算术表达式要溢出其参数类型时发出警告?#include <stdio.h>
#include <limits.h>
int main()
{
int x = 1;
long long int y = (long long) x + INT_MAX;
printf("%lld\n", y);
return 0;
}
long long
可能比INT_MAX
(4 字节)+1 大得多(8 字节)https://godbolt.org/z/GezYEcejj - yanoint a, b; /* ... a>0, b>0 ... */ if (a > INT_MAX - b) fprintf(stderr, "a + b overflows\n");
- pmg