2017-04-19 3 views
3

enum_valueの名前を返すget_name(...)メソッドを作成したいと思います。列挙型の値はほとんどありませんが、1^32-1までです(配列マッピングを使用することはできません)。私は次のようでした一時的なconst char *を返す - それは動作します

const char* get_name(type_t x) { 
    switch (x) { 
     case type_1: return "NAME_FOR_TYPE_1"; 
     case type_2: return "NAME_FOR_TYPE_2"; 
     ... 
    } 
    return "INVALID"; 
} 

は事実である:

const char* get_name(type_t x) { 
    static const char* name_1 = "NAME_FOR_TYPE_1"; 
    static const char* name_2 = "NAME_FOR_TYPE_2"; 
    ... 
    static const char* invalid = "INVALID"; 

    switch (x) { 
     case type_1: return name_1; 
     case type_2: return name_2; 
     ... 
    } 
    return invalid; 
} 

その後、私は次のようにも動作しますと言われましたか?それはいつも働くでしょうか?

一時的にポインタを戻していませんか?

+0

「一時的」とは何ですか?スコープと生涯について読んだことがありますか?どの部分が混乱していましたか?あなたの研究を分かち合うことは、他の人にも役立つことが分かります –

答えて

13

文字列リテラルは、完全なプログラムの存続期間を持つ配列として格納されます。それらへのポインタは無効になることはありません。

したがって、第2の代替案を実行するのは安全です。一時的なものはありません。

関連する問題