c - 变量的双重定义

标签 c

众所周知,外部声明的变量可以被初始化。

#include<stdio.h>

extern int a=5; //will work as both definition and declaration.
int main()
{

}
<小时/>

为什么这个程序编译和运行没有错误。

extern int a=5; //will work as both definition and declaration.
int main()
{

}

int a; // isn't it second definition??

最佳答案

C 有一个“暂定定义”的概念。大多数没有初始值设定项的定义都是“暂定的”,因此允许任意数量的定义,只要它们不相互冲突即可。在翻译单元的末尾,变量的定义基本上变成了这些定义的组合(例如,如果一个定义说变量是 const,而另一个定义说它是 volatile),该变量最终将同时为 constvolatile

带有初始值设定项的定义绝不是临时性的,因此只允许其中之一。

关于c - 变量的双重定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16284682/

相关文章:

c++ - 使用大括号表示法 C++ 填充动态数组

C&Mac : trouble finding a header using pkg-config

c - C 中指针减法期间的除法

c - 栈, esp 寄存器

c - 英特尔 AVX 在 C 中的 _mm256_load_si256 整数运算不一致

C 代码(带逗号运算符)到 Delphi

c - 使用char指针模仿c中的strcpy函数

编译器提示放错了其他地方

c - 我如何编写一个函数来复制一个项目数组,用于复制一些定义数量的项目

c - 结构有两个字段,每个字段都是一维数组。将结构对象传递给没有指针的函数,会改变结构对象吗?