我开始学习C并且无法清楚地理解宏和常量变量之间的差异。
写作时会发生什么变化,
#define A 8
和
const int A = 8
答案 0 :(得分:25)
宏由预处理器处理 - 预处理器在源文件中进行文本替换,用文字8替换所有出现的'A'。
常量由编译器处理。它们具有类型安全的附加好处。
对于实际编译的代码,使用任何现代编译器,两者之间的性能差异应为零。
答案 1 :(得分:7)
宏定义的常量被预处理器替换。常量'变量'的管理方式与常规变量一样。
例如,以下代码:
#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中的标准变量相同的范围规则,这意味着它们可以在特定块内受到限制或可能重新定义,而不会泄漏 - 它类似当地与全球变量的情况。
答案 2 :(得分:3)
你可以写
#define A 8
int arr[A];
但不是
const int A = 8;
int arr[A];
如果我正确地回忆起规则。
答案 3 :(得分:1)
首先,第一个将导致预处理器在编译器执行任何操作之前将所有出现的A替换为8,而第二个不涉及预处理器