External/global C 中的变量

External/global variable in C

我正在使用 C 编程现代方法一书学习 C 中的全局变量。

下面给出了书中的一个例子,为什么对多个函数使用相同的全局变量是个坏主意。 我不明白为什么函数 print_all_rows 只执行函数 print_one_row 一次。

假设我调用第一个函数 print_one_row,然后调用函数 print_all_rows。 在程序的开头,编译器默认将 i 设置为 0。一旦程序完成 print_one_row 函数的执行,i 的值为 11。

程序进入函数 print_all_rows,将 i 设置为 1,调用函数 print_one_row,然后 i 递增为 12 而不是 2.

如果我将 i 的值更改为 1,为什么它会增加 i 到 12 而不是 2?

int i;
void print_one_row(void)
{
    
    for (i = 1; i <= 10; i++)
        printf ("*" ) ;
}
void print_all_rows(void) {
    
    for (i = 1; i <= 10; i++) {
        print_one_row();
        printf ("\n") ;
    }
}

因为 i 是 glocal 变量(两个函数通用)并且在第一次调用 print_one_row 后其值为 11。使用此值 (11),print_all_rows 中的 for 循环的第二次迭代退出并且不再有 print_one_row.

的调用

print_all_rows 中,就在第一次调用 print_one_row 之前,i 的值为 1。

然后调用print_one_row。当该函数 returns、i 的值为 11 时。然后评估 print_all_rows 中的循环增量,将 i 从 11 增加到 12,然后评估条件为假,则 print_all_rows returns.