“静态常量"与“#define"vs“枚举" [英] "static const" vs "#define" vs "enum"
本文介绍了“静态常量"与“#define"vs“枚举"的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
以下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
枚举 { 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"vs“枚举"的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文