erk*_*gur 18 c constants c-preprocessor
可能重复:C中的
"static const"vs"#define"
我开始学习C并且无法清楚地理解宏和常量变量之间的差异.
我写的时候有什么变化
#define A 8
Run Code Online (Sandbox Code Playgroud)
和
const int A = 8
Run Code Online (Sandbox Code Playgroud)
?
Mic*_*ael 28
宏由预处理器处理 - 预处理器在源文件中进行文本替换,用文字8替换所有出现的'A'.
常量由编译器处理.它们具有类型安全性的额外好处.
对于实际编译的代码,使用任何现代编译器,两者之间应该没有性能差异.
宏定义的常量由预处理器替换.常量'变量'的管理方式与常规变量一样.
例如,以下代码:
#define A 8
int b = A + 10;
Run Code Online (Sandbox Code Playgroud)
将实际编译器看作是
int b = 8 + 10;
Run Code Online (Sandbox Code Playgroud)
但是,这段代码:
const int A = 8;
int b = A + 10;
Run Code Online (Sandbox Code Playgroud)
会显示为:
const int A = 8;
int b = A + 10;
Run Code Online (Sandbox Code Playgroud)
:)
在实践中,主要的变化是范围:常量变量遵循与C中的标准变量相同的范围规则,这意味着它们可以在特定块内受到限制或可能被重新定义,而不会泄漏 - 它类似于本地与全局变量情况.
在C中,你可以写
#define A 8
int arr[A];
Run Code Online (Sandbox Code Playgroud)
但不是:
const int A = 8;
int arr[A];
Run Code Online (Sandbox Code Playgroud)
如果我没记错规则的话。请注意,在 C++ 上,两者都可以工作。
| 归档时间: |
|
| 查看次数: |
35884 次 |
| 最近记录: |