C のテーブルでサイズを指定した文字列リテラルの最もエレガントな実装を探しています。要点は、コンパイル時にコンパイラに sizeof("Some String Literal") を計算させることです。
これまでのところ、次の 2 つの可能性を考えることができます (以下のコードを参照)。
オプション A の場合と同様に、文字列を 2 回入力します。文字列が多く、文字列を変更する必要がある場合、入力エラーが発生する可能性があるため、これは適切な解決策ではありません。
オプション B で行ったように、文字列リテラルを定義し、テーブルで使用します。
または、よりエレガントなソリューションはありますか?
#define STR_OPTION_B "Option B"
typedef struct
{
enum {
OPTION_A,
OPTION_B
} optionIDs;
char* pString;
int sizeOfString;
}
tTableElement;
tTableElement table[] =
{
{ OPTION_A, "Option A", sizeof("Option A") },
{ OPTION_B, STR_OPTION_B, sizeof(STR_OPTION_B) }
};