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

Ang*_*uel 1 c arrays string sizeof string-literals

我正在寻找最优雅的字符串文字实现,其大小在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) }
};
Run Code Online (Sandbox Code Playgroud)

abe*_*nky 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
Run Code Online (Sandbox Code Playgroud)

这应该扩展到字面上:

tTableElement table[] =
{
    { OPTION_A, "Option A", sizeof("Option A") },
    { OPTION_B, "Option B", sizeof("Option B") }
};
Run Code Online (Sandbox Code Playgroud)

  • @abelenky:所有以前导下划线开头,后跟大写字母或下划线的标识符都保留在任何范围内.具有前导下划线的标识符保留在全局范围内.(参见http://stackoverflow.com/questions/228783/what-are-the-rules-about-using-an-underscore-in-ac-identifier) (3认同)