C程序示例2
我只是想澄清一些观点;如果我错了,请纠正我,在上面的代码中:在第一个循环中,当a=5时,内部for循环从j=1运行到j=6当a变为真时,它遇到中断,并且j的值被设置为6,并打印出来。这适用于a=6,7,8..。但当“a=9”时会发生什么?我首先设置了j,C程序示例2,c,C,我只是想澄清一些观点;如果我错了,请纠正我,在上面的代码中:在第一个循环中,当a=5时,内部for循环从j=1运行到j=6当a变为真时,它遇到中断,并且j的值被设置为6,并打印出来。这适用于a=6,7,8..。但当“a=9”时会发生什么?我首先设置了j,void main()是错误的。使用int main()。其次,当j==9时,执行循环体,然后j增加一次,使其10,然后j
void main()
是错误的。使用int main()
。其次,当j==9
时,执行循环体,然后j
增加一次,使其10
,然后j<10
为false
,从而终止for
循环,并且printf(“%d\n”,j)代码>部分被执行,它将打印j
的值,即10
,正如您所说,您已经设置了j让我们看看GCC编译器为以下代码段生成的代码
6
7
8
9
10
10
10
10
10
10
intmain(){
int x;
对于(x=1;x<10;++x)
;
返回0;
}
-
main:
pushq%rbp
movq%rsp,%rbp
movl$1,-4(%rbp)
jmp.L2
.L3:
加成$1,-4(%rbp)
.L2:
cmpl$9,-4(%rbp)
jle.L3void main
错误。使用intmain()
。假设“a”等于9。好啊然后你的程序进入第二个for循环“for(j=1;ja)”将永远不会触发,因为for循环“for(j=1;jj)你不需要汇编程序。for
的定义足够了。汇编程序符合该定义。是的,让我们在不知道它如何工作的情况下编写代码。
6
7
8
9
10
10
10
10
10
10
int main() {
int x;
for(x = 1; x < 10; ++x)
;
return 0;
}
main:
pushq %rbp
movq %rsp, %rbp
movl $1, -4(%rbp)
jmp .L2
.L3:
addl $1, -4(%rbp)
.L2:
cmpl $9, -4(%rbp)
jle .L3 <---------------
movl $0, %eax
popq %rbp
ret