可能是重复问题:
C语言中“static const”与“#define”的区别
我开始学习C语言,但是不能清楚地理解宏和常量变量之间的区别。
当我编写以下代码时,会发生什么变化?
#define A 8
并且。const int A = 8
可能是重复问题:
C语言中“static const”与“#define”的区别
我开始学习C语言,但是不能清楚地理解宏和常量变量之间的区别。
当我编写以下代码时,会发生什么变化?
#define A 8
并且。const int A = 8
宏由预处理器处理 - 预处理器在源文件中执行文本替换,将所有出现的 'A' 替换为字面值 8。
常量由编译器处理。它们具有类型安全的附加优势。
对于实际编译后的代码,在任何现代编译器中,两者之间应该没有性能差异。
宏定义的常量会被预处理器替换。常量“变量”与普通变量一样进行管理。
例如,以下代码:
#define A 8
int b = A + 10;
对于实际的编译器来说,看起来是这样的
int b = 8 + 10;
然而,这段代码:
const int A = 8;
int b = A + 10;
将显示为:
const int A = 8;
int b = A + 10;
实际上,主要的变化在于作用域:常量变量遵循C语言标准变量相同的作用域规则,这意味着它们可以在特定的块内部受限或可能被重新定义,而不会泄漏出来 - 这类似于局部变量和全局变量的情况。
#define A 8
int arr[A];
但不包括:
const int A = 8;
int arr[A];
如果我回忆得没有错的话,注意在C++中两种方法都可以工作。