在C中,哪一个最好在以下语句中使用?
static const int var = 5;
或者
#define var 5
或者
enum { var = 5 };
答案
这取决于您需要的值。您(到目前为止其他所有人)省略了第三个选择:
static const int var = 5;
#define var 5
enum { var = 5 };
忽略有关名称选择的问题,然后:
- 如果您需要将指针传递,则必须使用(1)。
- 由于(2)显然是一种选择,因此您无需通过指针。
- (1)和(3)在调试器的符号表中都有一个符号 - 使调试更容易。(2)更有可能没有符号,让您想知道它是什么。
- (1)不能用作全局范围阵列的维度;(2)和(3)都可以。
- (1)不能用作功能范围处静态数组的维度;(2)和(3)都可以。
- 根据C99,所有这些都可以用于本地阵列。从技术上讲,使用(1)将暗示使用VLA(可变长度阵列),尽管" var"所引用的维度当然可以固定在尺寸5处。
- (1)不能在开关语句之类的地方使用;(2)和(3)都可以。
- (1)不能用来初始化静态变量;(2)和(3)都可以。
- (2) 可以更改您不想更改的代码,因为它由预处理器使用;
- 您可以检测到(2)是否已在预处理器中设置;(1)和(3)都不允许。
因此,在大多数情况下,更喜欢"枚举"而不是替代方案。否则,第一个也是最后一个项目符号可能是控制因素 - 如果您需要一次满足两者,则必须更加努力。
If you were asking about C++, then you’d use option (1) — the static const — every time.