【发布时间】:2011-03-14 02:30:43
【问题描述】:
刚开始学C,对宏和常量变量的区别理解不清楚。
当我写作时发生了什么变化,
#define A 8
和
const int A = 8
?
【问题讨论】:
标签: c constants c-preprocessor
刚开始学C,对宏和常量变量的区别理解不清楚。
当我写作时发生了什么变化,
#define A 8
和
const int A = 8
?
【问题讨论】:
标签: c constants c-preprocessor
在C中,你可以写
#define A 8
int arr[A];
但不是:
const int A = 8;
int arr[A];
如果我没记错规则。请注意,在 C++ 上,两者都可以工作。
【讨论】:
宏定义的常量被预处理器替换。常量“变量”的管理方式与常规变量一样。
例如下面的代码:
#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 中的标准变量相同的作用域规则,这意味着它们可以在特定块内被限制或重新定义,而不会泄漏 - 它是相似的到局部变量与全局变量的情况。
【讨论】:
一方面,第一个将导致预处理器在编译器执行任何操作之前将所有出现的 A 替换为 8,而第二个不涉及预处理器
【讨论】:
宏由预处理器处理 - 预处理器在源文件中进行文本替换,将所有出现的“A”替换为文字 8。
常量由编译器处理。它们具有类型安全的额外好处。
对于实际编译的代码,使用任何现代编译器,两者之间的性能差异应该为零。
【讨论】: