C:infinte循环的正确原因

Mar*_*iry 0 c for-loop

我和另一位大学生讨论过以下这个问题的原因.

#include <stdio.h>
#include <stdlib.h>

void print_sign2(void);

int ctr;
char sign1='x';
char sign2='=';


int main() {
    for (ctr=0; ctr<10; ctr++){
        printf("%c",sign1);
        print_sign2();
    }
    return 0;
}

void print_sign2(void) {
    for (ctr=0; ctr<2; ctr++)
        printf("%c",sign2);
}
Run Code Online (Sandbox Code Playgroud)

我认为这个循环是因为ctr整数是全局的并且也在函数中使用print_sign2.这意味着每次print_sign2调用该函数时ctr都设置为0.这是正确的吗?

Dav*_*rtz 6

print_sign2完成,ctr<2是假的.第一次这个变为假是什么时候ctr是2.所以ctr是2.因此循环main永远不会终止,因为ctr永远不会超过3,因此ctr<10总是如此.