0

私はCが初めてで、enumが本当にいいと思いました。私のプログラムは文字列を取得し、列挙型を使用してケースを処理します。その後、(時々) 列挙型テーブルの文字列と一致する文字列を送り返す必要があります。列挙型でそれを行う方法はありますか、それともルックアップテーブルを使用する必要がありますか? このようなもの

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) {
...
}
4

2 に答える 2

4

いいえ、これを自動的に取得する方法はありません。方法を実装する必要があります。ルックアップ テーブルは 1 つのソリューションです。

列挙値の名前は「文字列」ではなく、関数名や変数名などの単なる記号です。コード生成では何の役割も果たしません。コードが実行されると、名前が残っていないすべてのマシン コードになります。

于 2013-03-13T10:11:18.727 に答える
1

記録のために、プリプロセッサの「stringify」演算子を利用できます。

#define MAKE_STR(enumMember) #enumMember

これが行うことは、enumMember を「enumMember」に置き換えて、文字列と同じように使用できるようにすることです。

例:

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

EDITただし、stringify が行うことは、渡されたものを引用符で囲むだけなので、# の後に書かれているものは文字通り文字列化されることに注意してください。

于 2013-03-13T10:41:09.140 に答える