循环中的静态变量与块中的变量和循环

问题描述 投票:0回答:1

在 C 中我们可以使用块来限制变量的范围,所以

{
    int var = /* initialization */;

    while(...) {
        // some stuff with var
    }
}

相当于

while(...) {
    static int var = /* initialization */;
    // some stuff with var
}

c loops static
1个回答
2
投票

没有。

  • 带有

    static
    关键字的初始化器必须是常量。

    {
       int var = f();
       for ( int j=0; j<2; ++j ) {
          printf( "%d\n", var++ );
       }
    }
    
    printf( "--\n" );
    
    for ( int j=0; j<2; ++j ) {
       static int var = f();
       printf( "%d\n", var++ );
    }
    
    <source>: In function 'main':
    <source>:18:24: error: initializer element is not constant
       18 |       static int var = f();
          |     
    
  • 带有

    static
    关键字的在程序运行期间一直存在,无论代码执行多少次,它都只会被初始化一次。如果该代码块位于多次执行的循环中或多次调用的函数中,则它不会按照期望的频率进行初始化。

    for ( int i=0; i<2; ++i ) {
       int var = 3;
       for ( int j=0; j<2; ++j ) {
          printf( "%d\n", var++ );
       }
    }
    
    printf( "--\n" );
    
    for ( int i=0; i<2; ++i ) {
       for ( int j=0; j<2; ++j ) {
          static int var = 3;
          printf( "%d\n", var++ );
       }
    }
    
    3
    4
    3
    4
    --
    3
    4
    5
    6
    
© www.soinside.com 2019 - 2024. All rights reserved.