【问题标题】:C - initializer element is not constantC - 初始化元素不是常数
【发布时间】:2015-06-02 16:57:37
【问题描述】:

这是我的 C 代码的 sn-p:

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)

当试图编译编译器说“初始化元素不是常数”,我不明白为什么。怎么回事?

【问题讨论】:

  • 该分配是否在全局范围内完成?
  • 是的,也许这就是问题所在。

标签: c


【解决方案1】:

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

根据 C99 标准:第 6.7.8 节:

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

但是,如果在函数内并且对于非静态变量,您可以进行这样的初始化。

【讨论】:

    猜你喜欢
    • 2016-06-28
    • 2018-01-27
    • 2014-05-25
    • 2015-07-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-10
    相关资源
    最近更新 更多