C – 初始化元素不是常量

这是我在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)

在尝试编译时,编译器说“初始化元素不是常量”,我不明白为什么。 这是怎么回事?

dictionary_load_lang()是一个函数,因此是一个非常量。 您不能将非常量用于静态存储变量(读取:全局和/或static ):

根据C99标准:第6.7.8节:

具有静态存储持续时间的对象的初始值设定项中的所有表达式应为常量表达式或字符串文字。

但是,如果在函数内和非静态变量中,您可以执行此类初始化。