C程序示例2

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

我只是想澄清一些观点;如果我错了,请纠正我,在上面的代码中:在第一个循环中,当a=5时,内部for循环从j=1运行到j=6a变为真时,它遇到中断,并且j的值被设置为6,并打印出来。这适用于a=6,7,8..。但当“a=9”时会发生什么?我首先设置了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.L3
void 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