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

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

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

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

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

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

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

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

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

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

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

相关推荐
潼心1412o22 分钟前
C语言(长期更新)第15讲 指针详解(五):习题实战
c语言·开发语言
JuneXcy4 小时前
结构体简介
c语言·数据结构·算法
jiaway4 小时前
【C语言】第四课 指针与内存管理
c语言·开发语言·算法
黑客思维者6 小时前
《我是如何用C语言写工控系统的漏洞和Bug》连载(1)内容大纲
c语言·bug·工控漏洞
j_xxx404_6 小时前
数据结构:栈和队列力扣算法题
c语言·数据结构·算法·leetcode·链表
南莺莺6 小时前
假设一个算术表达式中包含圆括号、方括号和花括号3种类型的括号,编写一个算法来判别,表达式中的括号是否配对,以字符“\0“作为算术表达式的结束符
c语言·数据结构·算法·
buyutang_8 小时前
C/C++ Linux系统编程:线程控制详解,从线程创建到线程终止
linux·c语言·c++·学习
jiaway8 小时前
【C语言】第一课 环境配置
c语言·开发语言
Qiang_san8 小时前
GNU Make | C/C++项目自动构建入门
c语言·c++·gnu
青草地溪水旁9 小时前
C/C++中的可变参数 (Variadic Arguments)函数机制
c语言·c++·可变参数