“静态常量"与“#define"与“枚举" [英] "static const" vs "#define" vs "enum"

查看:25
本文介绍了“静态常量"与“#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:

  1. static const int var = 5;
  2. #define var 5
  3. 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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆