static const int 和 static int const 有什么区别?

What is the difference between static const int and static int const?

在此 answer 中使用的 OP:

static int const var = 5;

在条件编译控件的上下文中。


使用static const intstatic int const有区别吗?

例如:

static const int var;

对比

static int const var;

我不知道在 staticconst 之间暗示类型的技术。有区别吗?

C 2018 6.7 1中给出了声明说明符的语法,说明存储说明符class(如static)、类型(如shortdouble)、限定符(例如 const)、函数(inline_Noreturn)和对齐可以以任何顺序出现。第 6.7 条中没有对说明符出现的顺序给出任何含义,因此我们可以假定说明符的任何组合具有相同的含义,而不管顺序如何。

在这方面唯一提到的“顺序”出现在 6.7.2 2 中,它说“......类型说明符可以以任何顺序出现,可能与其他声明说明符混合。”所以你可以写long static int const long for static const long long int,就像你可以说“square red big house”而不是“big square red house”——没有规则反对,但它会seem funny 给人们,可能会把他们扔掉。

请注意,* 表示指针,() 用于分组或参数列表,[] for 下标不是声明说明符,不能随声明说明符自由重新排序。 (它们实际上是 声明符 的一部分,它是 声明说明符 声明的独立部分。)

但是,该标准在 6.11.5:

中将在其他说明符或限定符之后使用 storage-class 说明符描述为已过时

The placement of a storage-class specifier other than at the beginning of the declaration specifiers in a declaration is an obsolescent feature.

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