初始分散元件不是常数 - 使用循环内部的静态变量



我正在尝试有关混合声明的示例。为什么此静态int x = j i给出错误" initialiser元素不是常数"?

静态变量总是必须以常数而声明,而不分配变量?

#include<stdio.h>
int main(){
        int i = 1;
        int j;
        for(j = 2 * i ; j < 20; j++){
                static int x = j + i;
                printf("n x = %d n",x);
                x += 2;
                printf("n i = %d n",i);
                printf("n &x = 0x%x n",(unsigned int)&x);
        }
        return 0;
}

定义时可以初始化标量变量,并按照具有平等符号和表达式的名称来初始化: int x = 1; char squota = '''; long day = 1000L * 60L * 60L * 24L; /* milliseconds/day */

对于外部和静态变量,初始化程序必须是常数表达式;初始化是在程序开始执行之前就完成的。对于自动变量和寄存器变量,初始化程序不仅限于一个常数:它可能是任何涉及先前定义值的表达式,甚至函数调用。

自动变量是局部函数变量。
摘自K&amp; r第4章。

在编译时间而不是运行时间评估常数表达式,并且可以在可以使用常数的任何地方使用。常数表达式必须评估为该类型的代表值范围内的常数。

最新更新