C言語で配列を定義する際に列挙を配列の下付き文字として使用する
2468 ワード
昨日コードを書いて、このような書き方があると言われました.不思議です.通常、配列を定義するのは一番上のどのタイプの配列で、次に下付きまたは足付きは0から+++です.
しかし、0-Nという整形数字で下付き文字を作るのは可読性が非常に高くなく、この配列に保存されているデータが複雑であれば、このようなハードコーディングの下付き文字方式は非常に危険である.したがって、ここでは通常、列挙変数を下付き文字として使用して配列にアクセスします.次のように
ここでは、言語タイプを保存するための文字ポインタ型配列を定義し、アクセス配列の足標として使用する列挙タイプを以下のようにします.
ここではlanguage_を使いますtype_Data[OS_APP_LANGUAGE_TYPE_EN]は、配列の最初のメンバーにアクセスします.このように書き込みの可読性が高く、後で配列のメンバー、列挙のメンバーを追加し続けることができ、コードはループ判定で書くことができ、これにより、後で新しいメンバーを追加するには、列挙と配列に変数を追加するだけでよい.しかし、このコードにも隠れた問題があります.可読性の高いコードは、実際にはハードコーディングを足掛かりとしており、データを入力する際に配列や列挙の順序が変化するとバグが発生し、このバグは発見しにくい.この列挙はSDKとして上層部に提供され、あなたのコードは公開されていないので、大きな問題が発生します.
このような危険性を回避するために、配列を定義する際に列挙を配列の下付き文字として使用することができ、データ入力が混乱しても、配列定義時に列挙下付き文字定義と配列メンバーが正しく対応できる限り、このようなエラーを回避することができます.コードは次のとおりです.
language_の使用type_Data[OS_APP_LANGUAGE_TYPE_EN]は配列にアクセスし,技術データの順序が乱れても問題は起こらない.
int array[10] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
しかし、0-Nという整形数字で下付き文字を作るのは可読性が非常に高くなく、この配列に保存されているデータが複雑であれば、このようなハードコーディングの下付き文字方式は非常に危険である.したがって、ここでは通常、列挙変数を下付き文字として使用して配列にアクセスします.次のように
static char* language_type_data[] = {
"Chinese",
"German",
"American"
};
ここでは、言語タイプを保存するための文字ポインタ型配列を定義し、アクセス配列の足標として使用する列挙タイプを以下のようにします.
typedef enum OS_APP_LANGUAGE_TYPE_E
{
OS_APP_LANGUAGE_TYPE_EN = 0,
OS_APP_LANGUAGE_TYPE_DE = 1,
OS_APP_LANGUAGE_TYPE_US = 2,
OS_APP_LANGUAGE_TYPE_UNKNOWN,
}OS_APP_LANGUAGE_TYPE_E;
OS_APP_LANGUAGE_TYPE_E os_app_language_type_data;
ここではlanguage_を使いますtype_Data[OS_APP_LANGUAGE_TYPE_EN]は、配列の最初のメンバーにアクセスします.このように書き込みの可読性が高く、後で配列のメンバー、列挙のメンバーを追加し続けることができ、コードはループ判定で書くことができ、これにより、後で新しいメンバーを追加するには、列挙と配列に変数を追加するだけでよい.しかし、このコードにも隠れた問題があります.可読性の高いコードは、実際にはハードコーディングを足掛かりとしており、データを入力する際に配列や列挙の順序が変化するとバグが発生し、このバグは発見しにくい.この列挙はSDKとして上層部に提供され、あなたのコードは公開されていないので、大きな問題が発生します.
このような危険性を回避するために、配列を定義する際に列挙を配列の下付き文字として使用することができ、データ入力が混乱しても、配列定義時に列挙下付き文字定義と配列メンバーが正しく対応できる限り、このようなエラーを回避することができます.コードは次のとおりです.
static char* language_type_data[] = {
[OS_APP_LANGUAGE_TYPE_EN] = "Chinese",
[OS_APP_LANGUAGE_TYPE_DE] = "German",
[OS_APP_LANGUAGE_TYPE_US] = "American"
};
language_の使用type_Data[OS_APP_LANGUAGE_TYPE_EN]は配列にアクセスし,技術データの順序が乱れても問題は起こらない.