以下是我在C代码中的代码片段:
const char *d = "dictionary.dict";
struct dictionary *dict =
dictionary_load_lang(d); // Compile error here
dictionary_load_lang()的类型是struct dictionary *dictionary_load_lang(const char *lang)
。
当尝试编译时,编译器说“初始化元素不是常量”,我看不出原因。发生了什么事?
答案 0 :(得分:6)
dictionary_load_lang()
是一个函数,因此是一个非常数。您不能将非常量用于静态存储变量(读取:全局和/或static
):
根据C99标准:第6.7.8节:
具有静态的对象的初始值设定项中的所有表达式 存储持续时间应为常量表达式或字符串文字。
但是,如果在函数内和非静态变量中,可以进行这样的初始化。