簡體   English   中英

編譯時的整數值

[英]Integer values in compile time

我必須在具有不同整數ID的不同文件中寫入一些常量。 例如:

#define MESSAGE_FIRST 0

在其他文件中:

#define MESSAGE_ANOTHER 1

有什么方法可以在編譯時自動獲取該ID? 就像是:

#define MESSAGE_AUTO GetNextId()

我不能在這里使用枚舉,因為此指令將位於不同的文件中。

謝謝。

ps GCC,Linux

您可以執行帶有繼承和函數重載的編譯時計數器:

template<unsigned int n> struct Count { bool data[n]; };
template<int n> struct Counter : public Counter<n-1> {};
template<> struct Counter<0> {};
Count<1> GetCount(Counter<1>);

#define MAX_COUNTER_NUM 64
#define COUNTER_VALUE (sizeof(GetCount(Counter<MAX_COUNTER_NUM + 1>())) / sizeof(bool))
#define INC_COUNTER Count<COUNTER_VALUE + 1> GetCount(Counter<COUNTER_VALUE + 1>);

您可以在此處查看它的運行情況。 也可用於msvc。

您說您正在使用GCC。 GCC有一個名為__COUNTER__的(每個文件AFAIK)宏,每次使用后都會增加一個。

請注意,這是擴展,不包含在標准C ++中。

另一個選擇是使用枚舉:

enum {
    FIRST = 0,
    SECOND,
    THIRD
};

或者,您可以使用如下預處理程序指令手動執行此操作:

#define FIRST 0
#define SECOND (1 + FIRST)
#define THIRD (1 + SECOND)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM