“静态常量”vs“#定义”vs“枚举”

在C语言的下列语句中,哪一个更适合使用

静态常量int var=5;

定义变量5

枚举{var=5};

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

  1. static const int var=5
  2. #定义变量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 -每次。

发表评论