我正在尝试有关混合声明的示例。为什么此静态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章。
在编译时间而不是运行时间评估常数表达式,并且可以在可以使用常数的任何地方使用。常数表达式必须评估为该类型的代表值范围内的常数。