当前位置:网站首页>C陷阱与缺陷 第4章 链接 4.2 声明与定义
C陷阱与缺陷 第4章 链接 4.2 声明与定义
2022-07-29 23:27:00 【weixin_客子光阴】
声明与定义
声明语句:
int a;
如果其位置出现在所有函数体之外,就将其称为外部对象a的定义。这个语句说明a是一个外部整型变量,同时为a分配了存储空间。因为外部对象a并没有被明确指定任何初始值,所以它的初始值默认为0(某些系统中的链接器对以其他语言编写的程序并不保证这一点,C编译器由责任以适当方式通知链接器,确保未指定初始值的外部变量被初始化为0)。
下面的声明语句:
int a = 7;
在定义a的同时也为a明确了指定了初始值。这个语句不仅为a分配内存,也说明了在该内存中应该存储的值。
下面的声明语句:
extern int a;
并不是对a的定义。这个语句仍然说明a是一个外部整型变量,但是因为它包含了extern关键字,这就显示地说明了a的存储空间是在程序的其他地方分配的。从链接器的角度来看,上述声明是一个对外部变量a的引用,而不是对a的定义。因为这种形式的声明是对一个外部对象的显示引用,即使它出现在一个函数的内部,也仍然具有同样的含义。
下面的函数srand在外部变量random_seed中保存了其整型参数n的一份副本:
void srand(int n) {
extern int random_seed;
random_seed = n;
}
每个外部对象都必须在程序某个地方进行定义。因此,如果一个程序中包括了语句
extern int a;
那么,这个程序就必须在别的某个地方包括语句
int a;
这两个语句既可以是在同一个源文件中,也可以位于程序的不同源文件之中。
如果一个程序对同一个外部变量的定义不止一次,定义可能出现在同一个源文件中,或位于不同的源文件中如何处理这个问题与系统有关,不同的系统可能有不同的处理方式。严格的规则是,每个外部变量只能定义一次。
要想在所有的C语言中避免这个问题,唯一的解决办法就是每个外部变量定义一次。
边栏推荐
- devops学习(七) sonarqube 代码质检工具
- 全国双非院校考研信息汇总整理 Part.3
- 什么是色选机(color sorter)?
- jenkins use and maintenance
- Foxmail是什么邮箱?
- devops学习(八) 搭建镜像仓库---jenkins推送镜像
- Install PyCharm on Raspberry Pi
- high-level-rest-client 判断索引是否存在
- WeChat applet sliding navigation bar (how to set the floating window of the webpage)
- Three chess (written in C language)
猜你喜欢
随机推荐
微信小程序滑动导航栏(网页浮动窗口怎么设置)
MySQL Interview Questions: Detailed Explanation of User Amount Recharge Interview Questions
DNA修饰碳纳米管|DNA修饰单层二硫化钼|DNA修饰二硫化钨(注意事项)
微信小程序获取手机号getPhoneNumber接口报错41001
Single chip ds1302 clock program (51 single chip liquid crystal display program)
Brute force recursion to dynamic programming 04 (digital string conversion)
【2023校招刷题】常见面试问题总结(七、常见总线协议篇)(随后续面试不断更新....)
新版微信小程序发布指南
Gao Shu Xia|Triple Integral Exercises|Uncle Gao Shu|Handwritten Notes
y81. Chapter 4 Prometheus Factory Monitoring System and Actual Combat -- Monitoring Extension (12)
Three chess (written in C language)
JetsonNano learning (5) JetsonNano installs PyTorch and Torchvision
【leetcode】The sword refers to Offer II 002. Binary addition
Mysql8.0新特性之详细版本
idea设置自动去除未引用(不再引用)的引用
仿牛客论坛项目部署总结
信用卡又一新规来袭!菊风用科技助推金融行业提升服务质效
桌面软件开发框架大赏
【无标题】清空吗
【leetcode】50. Pow(x, n)(中等)(快速幂)









