2、变量的声明与定义&内部函数和外部函数

【3】变量的声明与定义

  对于函数。声明部分是对有关标识符(变量、函数、结构体)的属性进行声明;函数的声明是函数的原型,而函数的定义是对函数功能的定义。对被调函数的声明是放在主调函数的声明部分,而函数的定义显然不在声明部分的范围内,是独立模块!

  对于变量。在声明部分出现的变量有两种情况:需要建立存储空间的(int a;),不需要简历存储空间的(extern a;)前者称定义性声明;后者称引用性声明;

【4】内部函数和外部函数

  有的函数只能被本文件中的其他函数调用,不能被其他文件中的函数调用;有的只能被本文件中其他函数调用,不能被其他文件调用。

  根据函数是否能被其他源文件调用,将函数区分为内部函数和外部函数;

  内部函数又称静态函数,用static声明,使用内部函数可以使函数的作用仅局限于所在的文件,这样即使在不同文件存在同名的内部函数,也互不干扰

  外部函数,用extern声明,表示该函数是其他文件中定义的外部函数

  函数本质上是外部的,在程序中经常要调用其它文件中的外部函数,为方便编程,C语言允许在声明函数时省写extern。用函数原型能够把函数的作用域扩展到定义该函数的文件之外,只要在使用函数的每一个文件中包含函数的函数原型即可。函数原型通知编译系统:该函数在本文件中稍后定义,或在另一文件中定义

  函数原型扩展函数作用域的常见方式#include,include所指定的头文件中包含调用库函数时所需的信息。

——————————————————————————————————————

全局静态变量

在全局变量之前加上关键字static
  1)内存中的位置:静态存储区(静态存储区在整个程序运行期间都存在)
  2)初始化:未经初始化的全局静态变量会被程序自动初始化为0(自动对象的值是任意的,除非他被显示初始化)
  3)作用域:全局静态变量在声明他的文件之外是不可见的。准确地讲从定义之处开始到文件结尾。

好处:
<1>不会被其他文件所访问,修改。static全局变量只初使化一次,防止在其他文件单元中被引用;
<2>其他文件中可以使用相同名字的变量,不会发生冲突。

局部静态变量
在局部变量之前加上关键字static
  1)内存中的位置:静态存储区
  2)初始化:未经初始化的全局静态变量会被程序自动初始化为0(自动对象的值是任意的,除非他被显示初始化)
  3)作用域:作用域仍为局部作用域,当定义它的函数或者语句块结束的时候,作用域随之结束。

注:当static用来修饰局部变量的时候,它就改变了局部变量的存储位置,从原来的栈中存放改为静态存储区。但是局部静态变量在离开作用域之后,并没有被销毁,而是仍然驻留在内存当中,直到程序结束,只不过我们不能再对他进行访问。
  当static用来修饰全局变量的时候,它就改变了全局变量的作用域(在声明他的文件之外是不可见的),但是没有改变它的存放位置,还是在静态存储区中。  

静态函数

  函数的定义和声明默认情况下是extern的,但静态函数只是在声明他的文件当中可见,不能被其他文件所用。

  定义静态函数的好处:
<1> 其他文件中可以定义相同名字的函数,不会发生冲突
<2> 静态函数不能被其他文件所用。

存储说明符auto,register,extern,static,对应两种存储期:自动存储期和静态存储期。 auto和register对应自动存储期。具有自动存储期的变量在进入声明该变量的程序块时被建立,它在该程序块活动时存在,退出该程序块时撤销

<3> 静态函数会被自动分配在一个一直使用的存储区,直到退出应用程序实例,避免了调用函数时压栈出栈,速度快很多

static函数与普通函数有什么区别:static函数在内存中只有一份,普通函数在每个被调用中维持一份拷贝

时间: 2024-10-09 21:26:48

2、变量的声明与定义&内部函数和外部函数的相关文章

C++ 变量的声明与定义的区别

变量声明和定义的区别 我们在程序设计中,时时刻刻都用到变量的定义和变量的声明,可有些时候我们对这个概念不是很清楚,知道它是怎么用,但却不知是怎么一会事,下面我就简单的把他们的区别介绍如下:(望我的指点对你受益) 变量的声明有两种情况: 1.一种是需要建立存储空间的.例如:int a 在声明的时候就已经建立了存储空间. 2.另一种是不需要建立存储空间的. 例如:extern int a 其中变量a是在别的文件中定义的. 前者是“定义性声明(defining declaration)”或者称为“定义

黑马程序员--C语言基础之--变量、内部函数与外部函数

------- IOS培训期待与您交流! ---------- 一.变量 变量代表着一个有名字的.具有特定属性的一个存储单元,运行期间,变量的值是可以改变的.变量必须先定义,后使用.定义时,指定该变量的名字与类型.变量名实际上是以一个名字代表的一个存储地址:而从变量中取值,实际上是通过变量名找到相对应的内存地址,再从该存储单元中读取相对应的数据. 刚刚提到了变量定义这个词,我们知道,在定义函数的时候,我们都会先对函数进行一个声明,这就又引用了一个概念:声明.那么我们先来理解一下什么是声明和定义:

C语言学习笔记:14_内部函数和外部函数

/* * 14_内部函数和外部函数.c * * Created on: 2015年7月5日 * Author: zhong */ #include <stdio.h> #include <stdlib.h> /** * 所谓的外内部函数:是根据函数能否被其他源谁的调用来区分的: * 一:内部函数:在函数定义时前面加个static (c语言的这个静态函数和java的static方法就差太远了) * 如果一个函数只能被本文件中其它函数调用,它称为内部函数,又叫静态函数 * 只需要在定义

内部函数和外部函数

1 内部函数 如果一个函数只能被本文件中其它函数所调用,它就成为内部函数,在定义内部函数的时候加上static关键字,有点像java中的private. 即 static 类型标识符 函数名(形参)例如: static int fun (int a); 内部函数又称为静态函数,标明该函数不能被其它文件所引用. 2 外部函数 在定义函数时 加上关键字extern 则表示这个函数式外部函数,可以被别的文件调用,这个关键字可以省略掉 内部函数和外部函数,布布扣,bubuko.com

C++变量的声明和定义 终于搞明白了

1.变量的定义:变量的定义用于为变量分配存储空间,还可以为变量指定初始值.在一个程序中,变量有且仅有一个定义. 2.变量的声明:用于向程序表明变量的类型和名字.程序中变量可以声明多次,但只能定义一次. 3.两者联系与区别: (1)定义也是声明,因为当定义变量时我们也向程序表明了它的类型和名字: (2)但声明不是定义,可以通过使用extern关键字声明变量而不定义它.不定义变量的声明包括对象名.对象类型和对象类型前的关键字extern: 例: extern int i://声明但不定义 int i

【C++】C++中变量的声明与定义的区别

声明(declaration):意味着告诉编译器关于变量名称.变量类型.变量大小.函数名称.结构名称.大小等等信息,并且在声明阶段不会给变量分配任何的内存. 定义(definition):定义就是在变量声明后,给它分配上内存.可以看成“定义 = 声明 + 内存分配”. 例如: #include <iostream> using namespace std; int addtion(int a,int b);//声明 struct product{unsigned int weight;doub

Java变量常量声明和定义

一.常量和变量 1.常量变量定义 在程序中存在大量的数据来代表程序的状态,其中有些数据在程序的运行过程中值会发生改变,有些数据在程序运行过程中值不能发生改变,这些数据在程序中分别被叫做变量和常量. 2.变量举例: 在水果分类中,需要有一个水果篮来存放不同的水果,那在运行的过程中,这个水果篮的值会发生变化. 3.常量举例 代表常数,便于程序的修改(例如:圆周率的值)增强程序的可读性(例如:常量UP.DWON.LEFT和RIGHT分别代表上下左右,其数值分别是1.2.3和4).在实际的程序中,可以根

c++(3)----变量的声明和定义

分离式编译(separate compilation): 允许将程序分割为若干个文件,每个文件可独立编译. 声明:使得名字为程序所知. 定义:负责创建与名字关联的实体. 变量只能被定义一次,但可以被声明多次. 如果要在多个文件中使用同一个变量,就必须将声明和定义分离.此时,变量的定义必须出现在且只能出现在一个文件中,而其他用到该变量的文件必须对其进行声明. extern int i ; // 声明i 而非定义i int j ; // 声明并定义 int c=3; // 声明.定义.初始化 ext

C:变量的声明与定义

声明变量不需要建立存储空间,如:extern int a; 定义变量需要建立存储空间,如:int b; #include <stdio.h> int main() { //extern 关键字只做声明,不能做任何定义,后面还会学习,这里先了解 //声明一个变量a,a在这里没有建立存储空间 extern int a; a = 10; //err, 没有空间,就不可以赋值 int b = 10; //定义一个变量b,b的类型为int,b赋值为10 return 0; } 从广义的角度来讲声明中包含