C 11 gcc:声明中的明确资格?标准参考?

前端之家收集整理的这篇文章主要介绍了C 11 gcc:声明中的明确资格?标准参考?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
使用 gcc 4.7编译以下C 11程序时:
extern int i;
int ::i;

int main()
{
}

gcc抱怨说:

error: explicit qualification in declaration of `i`

这是不符合要求的行为吗?标准中的哪个部分被视为格式错误

8.3p1似乎表明应该允许:

If the
qualifier is the global :: scope resolution operator,the declarator-id refers to a name declared in the global
namespace scope.

更新:

从N3485 8.3p1:

A list of declarators appears after an optional (Clause 7) decl-specifier-seq (7.1). Each declarator contains
exactly one declarator-id; it names the identifier that is declared. An unqualified-id occurring in a declarator-
id shall be a simple identifier except for the declaration of some special functions (12.3,12.4,13.5) and for the
declaration of template specializations or partial specializations (14.7). When the declarator-id is qualified,
the declaration shall refer to a prevIoUsly declared member of the class or namespace to which the qualifier
refers (or,in the case of a namespace,of an element of the inline namespace set of that namespace (7.3.1))
or to a specialization thereof; the member shall not merely have been introduced by a using-declaration
in the scope of the class or namespace nominated by the nested-name-specifier of the declarator-id. The
nested-name-specifier of a qualified declarator-id shall not begin with a decltype-specifier. [ Note: If the
qualifier is the global :: scope resolution operator,the declarator-id refers to a name declared in the global
namespace scope. — end note ] The optional attribute-specifier-seq following a declarator-id appertains to
the entity that is declared.

解决方法

下一句话说(在n3337):

A declarator-id shall not be qualified except for the definition of a member function or static data member outside of its
class,the definition or explicit instantiation of a function or variable member of a namespace outside of its
namespace,or the definition of an explicit specialization outside of its namespace,or the declaration of a
friend function that is a member of another class or namespace.

在例外中没有提到全局变量的定义.

猜你在找的C&C++相关文章