当前位置:网站首页>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语言中避免这个问题,唯一的解决办法就是每个外部变量定义一次。
边栏推荐
- How to make labview an application (labview program recognizes shapes)
- 全国双非院校考研信息汇总整理 Part.8
- MySQL六脉神剑,SQL通关大总结
- 【leetcode】50. Pow(x, n)(中等)(快速幂)
- [leetcode] 82. Delete duplicate elements in sorted linked list II (medium)
- 微信小程序获取手机号getPhoneNumber接口报错41001
- Qt之在QML中使用QSortFilterProxyModel进行排序和过滤
- MySQL事务隔离级别详解
- 什么是色选机(color sorter)?
- 纳米金颗粒修饰核酸产品|碳纳米管载核酸-DNA/RNA材料|解析说明
猜你喜欢

Access Modbus TCP and Modbus RTU protocol devices using Neuron

devops学习(四) Jenkins CI 持续集成

1326. 灌溉花园的最少水龙头数目 动态规划

MySQL六脉神剑,SQL通关大总结

The latest Gansu construction welder (construction special operation) simulation question bank and answer analysis in 2022

Why does LabVIEW freeze when saving a VI

The second round of the real offer harvester~ How does the big factory inspect the candidates?(with detailed answer)

【openlayers】地图【二】

437. 路径总和 III ●●

2022年最新甘肃建筑八大员(材料员)模拟考试试题及答案
随机推荐
WeChat applet sliding navigation bar (how to set the floating window of the webpage)
【leetcode】80. 删除有序数组中的重复项 II(中等)(双指针、原地修改)
Design for failure 12 common design ideas
MySQL active/standby switch
Single chip ds1302 clock program (51 single chip liquid crystal display program)
y81. Chapter 4 Prometheus Factory Monitoring System and Actual Combat -- Monitoring Extension (12)
信用卡又一新规来袭!菊风用科技助推金融行业提升服务质效
We launched a "developer lab"
Wincc报表教程(SQL数据库的建立,wincc在数据库中保存和查询数据,调用Excel模板把数据保存到指定的位置和打印功能)
Cloud computing 1+X openstack articles
Prometheus 的功能特性
esp12f + tft 显示图片问题
接口性能测试方案设计方法有哪些?要怎么去写?
MySQL【基本select语句】
[2023 School Recruitment Questions] Summary of Common Interview Questions (7. Common Bus Protocols) (Continuously updated with subsequent interviews....)
纳米金颗粒修饰核酸产品|碳纳米管载核酸-DNA/RNA材料|解析说明
Three chess (written in C language)
环形链表(LeetCode 141、142)
y81.第四章 Prometheus大厂监控体系及实战 -- 监控扩展(十二)
线上无序的