[英]Declaring symbolic constants in header without initializing?
通常在頭文件中定義符號常量:
#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
帶有目的信息,並且編譯器可以執行其他檢查(例如,是否所有情況都在switch
中處理)。
大概還有六種變體。 不過,有一件事……它們都向客戶披露數值。 我想將這些值隱藏起來,只是因為它們無關緊要。 但是我想到的一種方式
typedef int T_Type;
// defined elsewhere
extern const T_Type T_FOO;
extern const T_Type T_BAR;
... 不適用於例如case
語句(因為T_FOO
和T_BAR
是常量,但不是編譯時常量表達式)。
有沒有辦法把它呢?
switch
語句中? 我的理解水平說“不”,但是我知道我並不了解所有事情。 ;-)
為了可用作switch
語句標簽,編譯器必須早些時候在此轉換單元的源代碼中看到這些值。
因此,從本質上講, 不 ,您不能在不公開符號常量的情況下聲明它們,並將其用作switch
標簽。
但是,您可以使用if
- else
結構。
您可以將映射到T_Type的方法/函數指針保存在某個地方,但是,是的,這僅僅是出於問題的解決,因此不值得首先創建-硬編碼邏輯只能與硬編碼值一起使用。
您的typedef聲明錯誤。 這個如何?
typedef int T_Type;
// defined elsewhere
extern const T_Type T_FOO;
extern const T_Type T_BAR;
// elsewhere defined as, say
const T_Type T_FOO = 1;
const T_Type T_BAR = 2;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.