首页 > C语言中#define和const疑惑

C语言中#define和const疑惑

#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 只是简单的替换,在编译前就完成所有替换。

const 只是修饰符 相当于权限限制符,表明在程序运行时这个值是常量, 但是在c和c++中处理都不一样, c中const只是简单的告诉编译器这是常量,但是在后面的使用中还是可以隐式修改。 而c++中的const 则在程序中始终都是常量,不可以被隐式修改!


你理解的是正确的。

define 这个是预处理命令,编译器会自动展开。在编译器进行编译的时候,int array[A]已经被预处理展开成int array[50]了。

而被const 修饰的变量还是变量,只是这个变量放在一个只读的数据段里面。
另外,在预处理阶段不能对数组大小进行初始化是不完全对的。如果说你使用gcc编译器的话,像
int a = 255; char b[a];这样是可以通过编译的。


来这里学习一下:浅淡 C 和 C++ 的 const 关键字

引用一句对你比较有用的

C语言和C++中的const有很大区别。在C语言中用const修饰的变量仍然是一个变量;而在C++中用const修饰过后,就变成常量了。

【热门文章】
【热门文章】