得了一个“a”;初始值设定项元素不是编译时;使用Clang 3.0编译coreutils库时出错
下面的C代码是GNUCoreutils(单击)中lib的一部分 我在使用Clang(3.0版)时遇到如下编译错误: localecove.c:73:5:错误:初始值设定项元素不是编译时 不变的 (注意,第73行用注释表示) 我很困惑,怎么了!?还是编译器出了问题得了一个“a”;初始值设定项元素不是编译时;使用Clang 3.0编译coreutils库时出错,c,compilation,clang,C,Compilation,Clang,下面的C代码是GNUCoreutils(单击)中lib的一部分 我在使用Clang(3.0版)时遇到如下编译错误: localecove.c:73:5:错误:初始值设定项元素不是编译时 不变的 (注意,第73行用注释表示) 我很困惑,怎么了!?还是编译器出了问题 #include <limits.h> struct lconv * localeconv (void) { static /*const*/ struct lconv result = {/*Line
#include <limits.h>
struct lconv *
localeconv (void)
{
static /*const*/ struct lconv result =
{/*Line 73*/
/* decimal_point */ ".",
/* thousands_sep */ "",
/* grouping */ "",
/* mon_decimal_point */ "",
/* mon_thousands_sep */ "",
/* mon_grouping */ "",
/* positive_sign */ "",
/* negative_sign */ "",
/* currency_symbol */ "",
/* frac_digits */ CHAR_MAX,
/* p_cs_precedes */ CHAR_MAX,
/* p_sign_posn */ CHAR_MAX,
/* p_sep_by_space */ CHAR_MAX,
/* n_cs_precedes */ CHAR_MAX,
/* n_sign_posn */ CHAR_MAX,
/* n_sep_by_space */ CHAR_MAX,
/* int_curr_symbol */ "",
/* int_frac_digits */ CHAR_MAX,
/* int_p_cs_precedes */ CHAR_MAX,
/* int_p_sign_posn */ CHAR_MAX,
/* int_p_sep_by_space */ CHAR_MAX,
/* int_n_cs_precedes */ CHAR_MAX,
/* int_n_sign_posn */ CHAR_MAX,
/* int_n_sep_by_space */ CHAR_MAX
};
return &result;
}
#包括
结构lconv*
localeconv(void)
{
静态/*const*/struct lconv结果=
{/*第73行*/
/*小数点*/“,
/*千年9月*/“,
/*分组*/“”,
/*单小数点*/“”,
/*周一至九月*/“”,
/*mon_分组*/“”,
/*正号*/“”,
/*负号*/“”,
/*货币符号*/“”,
/*分形数字*/字符最大值,
/*p_cs_在*/CHAR_MAX之前,
/*p_sign_posn*/CHAR_MAX,
/*p_sep_by_space*/CHAR_MAX,
/*n\u cs\u在*/CHAR\u MAX之前,
/*n_sign_posn*/CHAR_MAX,
/*n_sep_by_space*/CHAR_MAX,
/*国际货币符号*/“”,
/*整数分位数*/字符最大值,
/*int_p_cs_在*/CHAR_MAX之前,
/*整数p符号posn*/CHAR\u MAX,
/*int_p_sep_by_space*/CHAR_MAX,
/*int\u n\u cs\u在*/CHAR\u MAX之前,
/*整数符号/字符最大值,
/*int_n_sep_by_space*/CHAR_MAX
};
返回和结果;
}
使用-E
选项运行预处理器并检查输出。很可能CHAR\u MAX
扩展为非常量表达式。lconv
的成员类型似乎不同。我认为如果发生这种类型的转换,错误消息就会被释放出来。代码假定成员按特定顺序排列,但显然不是,根据ISO C标准,不必这样。您可以使用指定的初始值设定项来修复此问题,或者尝试在上游修复此问题。@BLUEPIXY,您是对的。在此错误之前,我发现了一个警告:localeconv.c:83:25:警告:不兼容的整数到指针转换使用“int”类型的表达式初始化“char”;/分形数字*/字符最大值,