C 在表中实现字符串文字及其大小
我正在寻找C语言中具有大小的字符串文字的最优雅的实现。主要的一点是,我希望编译器在编译时计算sizeof(“某些字符串文字”) 到目前为止,我可以想到以下两种可能性(参见下面的代码):C 在表中实现字符串文字及其大小,c,arrays,string,sizeof,string-literals,C,Arrays,String,Sizeof,String Literals,我正在寻找C语言中具有大小的字符串文字的最优雅的实现。主要的一点是,我希望编译器在编译时计算sizeof(“某些字符串文字”) 到目前为止,我可以想到以下两种可能性(参见下面的代码): 为选项A键入两次字符串。这不是一个好的解决方案,因为如果有许多字符串并且必须更改一个字符串,则可能会出现键入错误 定义字符串文字,然后在表中使用这些文字,与选项B相同 还是有更优雅的解决方案 #define STR_OPTION_B "Option B" typedef struct { enum {
#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) }
};
使用#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") }
};
使用#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") }
};
你认为什么是优雅?友好,易于实现,可读。你认为什么是优雅?友好,易于实现,可读性。即使宏的寿命由于<<代码> unDEFF < /代码>而受到限制,你可能应该避免从一个领先的下划线开始的名字(尤其是在大写字母后面)。尽管如此。@abelenky:所有以前导下划线开头,后跟大写字母或其他下划线的标识符都保留在任何范围内。带有前导下划线的标识符保留在全局范围内。(请参阅)尽管宏的生存期因
#unde
而受到限制,但您可能应该避免使用以前导下划线开头的名称(尤其是后跟大写字母时),尽管如此。@abelenky:所有以前导下划线开头,后跟大写字母或其他下划线的标识符都保留在任何范围内。带有前导下划线的标识符保留在全局范围内。(见附件)