在头文件中定义符号常量是常见的做法:
#define T_FOO 1
#define T_BAR 2
丑陋的。
static const int T_FOO = 1;
static const int T_BAR = 2;
更好,因为不是预处理器。
enum
{
T_FOO = 1,
T_BAR
} T_Type;
更好的是,因为T_Type
带有目的信息,并且编译器可以进行额外的检查(例如,如果所有情况都在 a 中处理switch
)。
可能还有六种变种。不过有一件事......他们都向客户披露了数值。我想隐藏这些值,只是因为它们不重要。但是我能想到的一种方法...
typedef int T_Type;
// defined elsewhere
extern const T_Type T_FOO;
extern const T_Type T_BAR;
...不适用于 egcase
语句(作为T_FOO
和T_BAR
是常量,但不是编译时常量表达式)。
有没有办法拥有这一切?
- 在标题中声明符号常量而不透露数值,
- 但可用作常量表达式,例如在
switch
语句中?
我的理解水平说“不”,但我知道我并不知道一切。;-)