Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/150.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ g++;编译后的程序集导致无限循环?_C++_Assembly - Fatal编程技术网

C++ g++;编译后的程序集导致无限循环?

C++ g++;编译后的程序集导致无限循环?,c++,assembly,C++,Assembly,我一直在研究GNU的g++编译器中编译的程序集,它看起来像是一个无限循环(g++-s file.c-o out的部分输出): 除了最后一条jmp指令之外,所有这些指令都是movq或计算指令,但这只是让我们回到.L3。这是以下代码的主体: ull i; // unsigned long long int for (i = x - 1; i >= 0; i--) temp &= array2[array1[i] &a

我一直在研究GNU的g++编译器中编译的程序集,它看起来像是一个无限循环(g++-s file.c-o out的部分输出):

除了最后一条jmp指令之外,所有这些指令都是movq或计算指令,但这只是让我们回到.L3。这是以下代码的主体:

          ull i; // unsigned long long int
          for (i = x - 1; i >= 0; i--)
               temp &= array2[array1[i] & 1];

它是如何退出循环的?看起来它只是减少了i(subq$1,-8(%rbp)),并在不进行比较的情况下重新启动。

假设
ull
是一个
无符号长
,循环永远不会结束,因为:

i >= 0
这永远是真的


注意:
g++
在启用警告的情况下编译时报告此问题。

假设
ull
无符号长
,循环永远不会结束,因为:

i >= 0
这永远是真的


注意:
g++
在启用警告的情况下编译时报告此问题。

请至少显示整个函数。什么类型是
i
?可能
未签名
?请至少显示整个函数。什么类型是
i
?可能是未签名的?嗯,是的。谢谢@我想在这里找到接受答案的方式和原因:嗯,嗯。谢谢@我想问的是:接受答案的方式和原因可以在这里找到: