为何使用long int的for循环会无限循环?Visual Studio报C6295错误
为什么使用long int的for循环会陷入无限循环?
在Visual Studio中遇到代码分析警告:
C6295 Ill-defined for-loop. Loop executes infinitely.
对应的C++代码如下:
for (long int i = 1; i <= 5000000000; i++) { //cout << i; }
问题原因
在Visual Studio的Windows编译环境下,long int是4字节的有符号整数,取值范围为 -2147483648 到 2147483647。而你设置的循环上限5000000000远超出了这个范围的最大值。
当变量i递增到2147483647时,再执行i++会触发有符号整数溢出。在Visual Studio的实现中,溢出后的数值会绕回成-2147483648,此时i <= 5000000000的判断永远为真(负数必然小于5000000000),循环也就陷入无限执行的状态。
解决办法
- 将变量类型改为
long long,它在Visual Studio中是8字节有符号整数,取值范围完全能覆盖5000000000:
for (long long i = 1; i <= 5000000000; i++) { //cout << i; }
- 或者将循环上限显式声明为长整型常量,避免类型不匹配问题:
for (long int i = 1; i <= 5000000000LL; i++) { //cout << i; }
内容的提问来源于stack exchange,提问作者CopperState
相关产品推荐
相关产品推荐

