#define A 50
const int B=40;
static int array[A];//正确
static int array2[B];//错误
const int C=2*A;//正确
const int D=2*B;//错误
int main()
{}
疑惑
const定义常量是不是发生在编译时,所以在程序预处理阶段不能对数组大小进行初始化或者对值进行初始化,而#define宏发生在预处理阶段,可以用实体对数组大小初始化时出现的宏进行宏展开。
我这样理解对吗
望更详细的补充
你理解的是正确的。
define 这个是预处理命令,编译器会自动展开。在编译器进行编译的时候,int array[A]已经被预处理展开成int array[50]了。
而被const 修饰的变量还是变量,只是这个变量放在一个只读的数据段里面。
另外,在预处理阶段不能对数组大小进行初始化是不完全对的。如果说你使用gcc编译器的话,像
int a = 255; char b[a];这样是可以通过编译的。