发表时间:2022-03-25来源:网络
这个问题挺有意思的。
因为C/C++中的声明很多时候都是定义,只是声明而不是定义的情况不多,比如:
通过extern关键字声明外部链接,且无初始化定义函数声明,且无函数体结构体/类声明,且无成员列表既然题目说的是变量,就以extern为例看一下变量的情况。
(感谢评论区C语言律师大大的指证,请自行将下文“全局变量”替换为“文件作用域变量”,“局部变量”替换为“函数/块作用域变量”,谢谢!)
1. 以extern声明的全局变量或局部变量,只声明不定义,且不使用时,是没有为它分配存储空间的。

2. 以extern声明的全局变量或局部变量,只声明不定义,且使用到了,则需要链接。如果其他源文件中没有定义,则出现链接错误;如果有定义,则其空间显示在出现其定义的源文件所编译出的目标文件中。
3. 以extern声明的全局变量或局部变量,声明且定义,是有分配存储空间的。(不符合题主描述的情况)

4. 不加extern的全局变量声明,因为其声明就是定义,所以无编译器优化时是有存储空间的。(不符合题主描述的情况)

5. 不加extern的局部变量声明(同时也是定义),如果不使用,则可能不在栈上分配空间。(不符合题主描述的情况)
gcc似乎没有分配栈上空间给x,因为y是直接从rbp-4开始的。
clang分配了栈上空间,并且初始化为0了。6. 在函数内声明extern,因为extern声明的变量一定是静态存储器(或C++11起可能为线程存储期),所以与1,2相同。
上一篇:中文编程语言的分类
皓盘云建最新版下载v9.0 安卓版
53.38MB |商务办公
ris云客移动销售系统最新版下载v1.1.25 安卓手机版
42.71M |商务办公
粤语翻译帮app下载v1.1.1 安卓版
60.01MB |生活服务
人生笔记app官方版下载v1.19.4 安卓版
125.88MB |系统工具
萝卜笔记app下载v1.1.6 安卓版
46.29MB |生活服务
贯联商户端app下载v6.1.8 安卓版
12.54MB |商务办公
jotmo笔记app下载v2.30.0 安卓版
50.06MB |系统工具
鑫钜出行共享汽车app下载v1.5.2
44.7M |生活服务
2022-03-26
2022-03-26
2022-03-26
2022-03-26
2022-03-26
2022-03-26
2022-03-26
2022-03-26
2022-02-15
2022-02-14