GCC如何处理变量重定义
How does GCC handle variable redefinition
我写了一段这样的代码
int a;
int a = 100;
int main()
{
}
GCC编译成功,但 g++ 编译失败。
我猜GCC是通过忽略变量a的第一个定义来处理这个问题的。但是我想知道精确的规则,这样我就不会错过任何东西。
有谁能帮我吗?In C
int a; /* Tentative definition */
int a = 100; /* Definition */
6.9.2 C11规范中的外部对象定义:
具有文件作用域的对象的标识符声明不带初始化式,不带存储类说明符或带存储类说明符static,构成一个暂定定义。如果翻译单元包含一个或多个试探性一个标识符的定义,翻译单元包含no外部定义该标识符,则该行为是准确的就好像翻译单元包含了它的文件作用域声明标识符,在转换结束时具有复合类型单元,初始化式等于0。
int i4; // tentative definition, external linkage static int i5; // tentative definition, internal linkage
在c++
int a;
是一个定义(不是试探性的),因为拥有一个对象的多个定义是非法的,所以它将无法编译。
相关文章:
- 用C++中的一个变量定义一个常量
- 变量定义到C++布尔值转换
- 未声明的标识符错误,但变量定义正确 (?)
- C++多线程程序:变量定义为类成员的隔离错误
- 将变量定义为静态时,为什么可以多次定义它
- 初始值设定项列表与构造函数赋值与变量定义
- 如何根据传递给函数的变量定义特征矩阵大小
- C++ 描述如何使用来简化变量定义
- 如何转发声明依赖于变量定义的类,而变体定义又依赖于模板化类?
- 是否修改其声明语句中的变量定义良好
- 使用类的其他成员变量定义类的成员变量数组
- 是否可以通过全局变量定义具有可变参数数的函数中的参数数量
- 元组 std::get() 不适用于变量定义的常量
- 全局使用变量定义和C 声明
- C++变量定义中的易失性类型量词位置
- 将变量定义为数组和正确的语法
- 多个,包括具有变量定义的头文件
- 调用构造函数,并将成员作为参数解析为变量定义
- 逗号分隔变量定义中关系前的序列
- 如何使用命名变量定义常量右值引用参数的默认值