2012-06-18 28 views
2

在Win32中有很多的地方標誌值與的DWORD值指定由OR #define的常量執行按位取得地方。轉換標誌整數人類可讀的字符串

然而,當涉及到運行程序和調試它,它可以成爲一個痛苦拆開生成的標誌值回自己的#define符號(這就是爲什麼我喜歡枚舉類型)。

重新實現Win32的函數和結構使用枚舉而不是常量的缺點是否有一種簡單而無痛的方式來自動將整數標誌值轉換回其組件的字符串表示形式?如將192轉換爲「FLAG_FOO | FLAG_BAR」(其中FLAG_FOO爲128且FLAG_BAR爲64)。

+0

其中一些可能已經有關聯的字符串,如錯誤代碼。 – chris

回答

0

你必須手工編碼的字符串。

if (myValue & FLAG_FOO == FLAG_FOO) { 
    printf("FLAG_FOO"); 
} 
if (myValue & FLAG_BAR == FLAG_BAR) { 
    printf("FLAB_BAR"); 
} 

更重要的一點,#定義的符號不是由編譯器,但由預處理器處理。這意味着預處理器獲取定義列表並用定義的值替換每個符號。編譯器甚至沒有關於哪個是原始符號的信息。

如果相反的定義它是變量,程序與調試信息編譯,那麼也許你可以與調試信息檢索數據播放。即使在這種情況下,它可能比僅僅一堆if更麻煩。

+3

-1不正確的表達式。這是一個運營商優先問題。看看http://en.cppreference.com/w/cpp/language/operator_precedence –

+0

-1出於同樣的原因。該代碼不起作用。 –

相關問題