2013-03-13 70 views
0

我是C新手,我發現枚舉非常好。我的程序獲取一個字符串,並使用枚舉做案例,然後(有時)我需要發回一個字符串匹配枚舉表中的一個。有沒有辦法用枚舉來做,或者我應該使用查找表? Something like this有沒有辦法返回到typedef枚舉的字符串?

typedef enum { 
    string1, 
    string2, 
    string3, 
    string4, 
    BADKEY     
} strings; 

function(string1); //will send the integer, 
        //but would love to be able to send the string. 

function(char *string) { 
... 
} 
+0

感謝您的鏈接,這裏有一些好主意。 @QuentinUK你能否詳細說明你的答案? – Juan 2013-03-13 10:24:57

+0

同樣考慮到它與上一個問題非常相似(如果不相同),我應該刪除它嗎? – Juan 2013-03-13 10:33:16

回答

4

不,沒有辦法自動得到這個。你必須實現一種方式,查找表是一種解決方案。

枚舉值的名稱不是「字符串」,它們只是像函數和變量名稱的符號;它們在代碼生成中不起作用。代碼運行後,所有機器代碼都沒有名字。

+0

:(很多信息丟失了,這是我害怕的答案,但是謝謝你清理它。 – Juan 2013-03-13 10:16:34

1

只是爲了記錄,您可以使用預處理器的「stringify」運算符。

#define MAKE_STR(enumMember) #enumMember 

這樣做的目的是將enumMember替換爲「enumMember」,因此您可以像使用字符串那樣使用它。

例如:

printf("The value of %s is %d", MAKE_STR(string1), string1); 

編輯不過,請注意什麼呢字符串化僅僅是圍繞着不管它是帶引號的傳遞,所以它的字面stringifies無論是排名後寫的。

相關問題