“静态常量"与“#define"与“枚举" [英] "static const" vs "#define" vs "enum"
本文介绍了“静态常量"与“#define"与“枚举"的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
以下 C 语句中哪个更好用?
Which one is better to use among the below statements in C?
static const int var = 5;
或
#define var 5
或
enum { var = 5 };
推荐答案
这取决于您需要该值的用途.您(以及目前为止的其他所有人)省略了第三种选择:
It depends on what you need the value for. You (and everyone else so far) omitted the third alternative:
static const int var = 5;
#define var 5
enum { var = 5 };
忽略名称选择的问题,然后:
Ignoring issues about the choice of name, then:
- 如果你需要传递一个指针,你必须使用 (1).
- 由于 (2) 显然是一个选项,因此您无需四处传递指针.
- (1) 和 (3) 在调试器的符号表中都有一个符号 - 这使得调试更容易.(2) 更有可能没有符号,让您想知道它是什么.
- (1) 不能用作全局范围内数组的维度;(2) 和 (3) 都可以.
- (1) 不能用作函数作用域内静态数组的维度;(2) 和 (3) 都可以.
- 在 C99 下,所有这些都可以用于本地数组.从技术上讲,使用 (1) 意味着使用 VLA(可变长度数组),尽管var"引用的维度当然会固定为 5.
- (1) 不能用在switch语句之类的地方;(2) 和 (3) 都可以.
- (1) 不能用于初始化静态变量;(2) 和 (3) 都可以.
- (2) 可以更改您不想更改的代码,因为它被预处理器使用;(1) 和 (3) 都不会产生这样的意外副作用.
- 可以检测预处理器中是否设置了(2);(1) 和 (3) 都不允许这样做.
因此,在大多数情况下,更喜欢枚举"而不是替代方案.否则,第一个和最后一个要点很可能是控制因素——如果你需要同时满足这两个要点,你就必须更努力地思考.
So, in most contexts, prefer the 'enum' over the alternatives. Otherwise, the first and last bullet points are likely to be the controlling factors — and you have to think harder if you need to satisfy both at once.
如果您问的是 C++,那么您每次都会使用选项 (1) — 静态常量.
这篇关于“静态常量"与“#define"与“枚举"的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文