C中的宏常量和常量变量有什么区别?

时间:2010-07-09 21:42:58

标签: c constants c-preprocessor

  

可能重复:
  “static const” vs “#define” in C

我开始学习C并且无法清楚地理解宏和常量变量之间的差异。

写作时会发生什么变化,

#define A 8

const int A = 8

4 个答案:

答案 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,而第二个不涉及预处理器