簡體   English   中英

uint64標志或uint32標志[2]用於32位編譯器的函數參數?

[英]uint64 flag or uint32 flag[2] for function argument to 32bit compiler?

我有一些位字段標志狀態的uint32變量和這些標志的枚舉。 該變量通過值作為參數傳遞給某些函數。

我需要再添加約20個標志。 我最好的選擇是什么? 將其擴展為64位還是將其視為2個32位的數組?

擴展到64位將導致我使用編譯器“擴展”,因為enum為32位寬。 但是使用數組似乎會導致更多工作。

我的代碼在32位和64位編譯器上編譯,並在Windows,Linux和Mac上運行。

提前致謝。

我將使用STL位集。 然后,我的枚舉不必一定是2的冪。使用常規枚舉,它只是位集中的索引。 您也可以使用vector<bool>

主要好處是可移植性,因為您的標志集現在可以適合任何平台的正常枚舉范圍。

例:

enum errorFlags { parity, framing, overrun, errorFlags_size };

std::bitset<errorFlags_size> flagSet;

. . .

// either of these set framing error condition
flagSet[framing] = true;
flagset.set(framing);

// either of these clear the framing error condition
flagSet[framing] = false;
flagset.reset(framing);

// this tests for the framing error condition
if (flagSet[framing])
{
    // we have a framing error
}

您知道位域語法嗎? 看起來像這樣:

struct Flags {
    unsigned int flag1 : 1;
    unsigned int flag2 : 1;
    unsigned int flag3 : 1;
}

等等。 冒號后面的數字表示您要專用於該成員的位數。 這是標准的C ++,而不是一些奇怪的供應商擴展。

有關更多信息,請訪問http://msdn.microsoft.com/zh-cn/library/ewwyfdbe(VS.71).aspx

我建議您改用std :: bitset

在使用C ++時,您可以編寫一個類作為替換類,在內部可以存儲兩個32位整數。

暫無
暫無

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

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