在表中实现字符串文字的大小

时间:2013-03-27 19:35:19

标签: c arrays string sizeof string-literals

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

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

  1. 键入字符串两次,如选项A所做。这不是一个好的解决方案,因为如果有很多字符串并且必须更改字符串,可能会出现输入错误。

  2. 定义字符串文字,然后在表格中使用这些文字与选项B一样

  3. 还是有更优雅的解决方案吗?

    #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) }
    };
    

1 个答案:

答案 0 :(得分: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") }
};