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 int
和static int const
有区别吗?
例如:
static const int var;
对比
static int const var;
我不知道在 static
和 const
之间暗示类型的技术。有区别吗?
C 2018 6.7 1中给出了声明说明符的语法,说明存储说明符class(如static
)、类型(如short
或double
)、限定符(例如 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 准备源代码。
在此 answer 中使用的 OP:
static int const var = 5;
在条件编译控件的上下文中。
使用static const int
和static int const
有区别吗?
例如:
static const int var;
对比
static int const var;
我不知道在 static
和 const
之间暗示类型的技术。有区别吗?
C 2018 6.7 1中给出了声明说明符的语法,说明存储说明符class(如static
)、类型(如short
或double
)、限定符(例如 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 准备源代码。