【时时三省】(C语言基础)关于变量的声明和定义

山不在高,有仙则名。水不在深,有龙则灵。 ----CSDN 时时三省

可能有些人弄不清楚定义与声明有什么区别,它们是否是一回事。有人认为声明就是定义,有人认为只有赋了值的才是定义。在C语言的学习中,关于定义与声明这两个名词的使用上始终存在着混淆。不仅许多初学者没有搞清楚,连不少介绍C语言的教材也没有给出准确的介绍。

一个函数一般由两部分组成:声明部分和执行语句。声明部分的作用是对有关的标识符(如变量、函数、结构体、共用体等)的属性进行声明。对于函数而言,声明和定义的区别是明显的,函数的声明是函数的原型,而函数的定义是对函数功能的定义。对被调用函数的声明是放在主调函数的声明部分中的,而函数的定义显然不在声明部分的范围内,它是一个独立的模块。

对变量而言,声明与定义的关系稍微复杂一些。在声明部分出现的变量有两种情况:一种是需要建立存储空间的(如"inta;"),另一种是不需要建立存储空间的(如"externa ;")。前者称为定义性声明( defining declaration ),或简称定义(definition);后者称为引用性声明( referencing declaration )。广义地说,声明包括定义,但并非所有的声明都是定义。对"int a;"而言,它既是声明,又是定义;而对"externa;"而言,它是声明而不是定义。

一般为了叙述方便,把建立存储空间的声明称定义,而把不需要建立存储空间的声明称为声明。

显然这里指的声明是狭义的,即非定义性声明。

外部变量定义和外部变量声明的含义是不同的。外部变量的定义只能有一次,它的位置在所有函数之外。

在同一文件中,可以有多次对同一外部变量的声明,它的位置可以在函数之内(哪个函数要用就在哪个函数中声明),也可以在函数之外。系统根据外部变量的定义(而不是根据外部变量的声明)分配存储单元。

对外部变量的初始化只能在"定义"时进行,而不能在"声明"中进行。所谓"声明",其作用是声明该变量是一个已在其他地方已定义的外部变量,仅仅是为了扩展该变量的作用范围而作的"声明"。

注意:有一个简单的结论,在函数中出现的对变量的声明(除了用extern声明的以外)都是定义。在函数中对其他函数的声明不是函数的定义。

相关推荐
Tingjct8 小时前
【初阶数据结构-二叉树】
c语言·开发语言·数据结构·算法
飞机和胖和黄9 小时前
考研之王道C语言第三周
c语言·数据结构·考研
醉颜凉9 小时前
【LeetCode】打家劫舍III
c语言·算法·leetcode·树 深度优先搜索·动态规划 二叉树
一匹电信狗9 小时前
【LeetCode_21】合并两个有序链表
c语言·开发语言·数据结构·c++·算法·leetcode·stl
卢锡荣12 小时前
Type-c OTG数据与充电如何进行交互使用应用讲解
c语言·开发语言·计算机外设·电脑·音视频
v_for_van12 小时前
力扣刷题记录2(无算法背景,纯C语言)
c语言·算法·leetcode
二年级程序员13 小时前
动态内存管理
c语言
我能坚持多久13 小时前
D20—C语言文件操作详解:从基础到高级应用
c语言·开发语言
(❁´◡`❁)Jimmy(❁´◡`❁)13 小时前
CF2188 C. Restricted Sorting
c语言·开发语言·算法
想放学的刺客14 小时前
单片机嵌入式试题(第27期)设计可移植、可配置的外设驱动框架的关键要点
c语言·stm32·单片机·嵌入式硬件·物联网