【问题标题】:static const vs const static [duplicate]静态常量与常量静态[重复]
【发布时间】:2018-03-08 12:23:32
【问题描述】:

在C语言中,static constconst static在变量声明上有区别吗?

const static 给出warning: 'static' is not at beginning of declaration

这不是我的代码,我看到的所有其他问题都是关于 C++ 的,static 在那里有不同的含义。

【问题讨论】:

  • 我不太确定这是不是重复的。这个问题询问 storage-class specifierstype-qualifiers 的顺序。 That question 询问 storage-class specifierstype-specifiers 的顺序。它们是不同的,标准对它们的描述也不同。请注意,6.7.3 表示类型限定符的顺序无关紧要,但 6.7.2 仅表示可以使用任何顺序;它并没有说顺序无关紧要。这可能是一个疏忽,但这是一个应该解决的差异。
  • 您应该显示导致警告的确切声明。另见Order of defining types

标签: c static constants


【解决方案1】:

限定符和说明符的顺序无关紧要。根据 C 2011 [N1570] 6.7.3 10:

...说明符或限定符列表中类型限定符的顺序不会影响指定的类型。

和 6.7.2 2:

…类型说明符可以以任何顺序出现,可能与其他声明说明符混合。

但是,该标准在 6.11.5 中将在其他说明符或限定符之后使用存储类说明符描述为过时:

将存储类说明符放置在声明中的声明说明符开头以外的位置已过时。

“过时”是指该功能可能会在标准的未来修订版中被考虑撤销(根据 Introduction 第 2 段)。因此,对使用 const static 发出警告的编译器建议进行更改,以帮助为 C 的未来版本准备源代码。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-07-02
    • 2010-11-21
    • 2013-04-16
    • 2010-12-13
    • 2010-10-19
    • 1970-01-01
    相关资源
    最近更新 更多