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

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

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

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