小编典典

“静态常量”与“#define”与“枚举”

all

在 C 中的以下语句中,哪一个更好用?

static const int var = 5;

要么

#define var 5

要么

enum { var = 5 };

阅读 97

收藏
2022-03-04

共1个答案

小编典典

这取决于您需要的价值。您(以及到目前为止的其他所有人)省略了第三种选择:

  1. static const int var = 5;
  2. #define var 5
  3. enum { var = 5 };

忽略有关名称选择的问题,然后:

  • 如果需要传递指针,则必须使用 (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) 都不允许这样做。

因此,在大多数情况下,更喜欢“枚举”而不是替代方案。否则,第一个和最后一个要点很可能是控制因素——如果你需要同时满足两者,你必须更加努力地思考。

如果您询问的是 C++,那么您每次都会使用选项 (1)“静态 const”。

2022-03-04