1

我正在寻找最优雅的字符串文字实现,它们的大小在 C 中的表中。要点是我希望编译器在编译时计算 sizeof("Some String Literal")。

到目前为止,我可以想到以下两种可能性(见下面的代码):

  1. 键入选项 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) }
};
4

1 回答 1

5

使用#define将字符串和字符串大小放入结构的宏。

#define STR_ENTRY(x) x, sizeof(x)
tTableElement table[] =
{
    { OPTION_A, STR_ENTRY("Option A") },
    { OPTION_B, STR_ENTRY("Option B") }
};
#undef STR_ENTRY

这应该从字面上扩展为:

tTableElement table[] =
{
    { OPTION_A, "Option A", sizeof("Option A") },
    { OPTION_B, "Option B", sizeof("Option B") }
};
于 2013-03-27T19:39:11.927 回答