首页 > 编程知识 正文

C语言程序的模块化,什么是块级作用域

时间:2023-05-04 04:40:50 阅读:153990 作者:4198

c语言作用域

类型

作用域

生命周期

自动变量

一对{}内

当前函数

静态局部变量

一对{}内

整个方案执行期

外部变量

整个程序

整个方案执行期

静态全局变量

当前文件

整个方案执行期

外部函数

整个程序

整个方案执行期

静态函数

当前文件

整个方案执行期

注册变量

一对{}内

当前函数

局部变量和全局变量

一.变量作用域

c语言变量的作用域如下:

代码块作用域(代码块是{}之间的代码)。

函数作用域

文件作用域

二.局部变量

1、说明

局部变量也称为auto自动变量(auto是否可写),通常在代码块{}内部定义的变量是自动变量,具有以下特征:

在一个函数内定义,仅在函数范围内有效

在复合语句中定义,仅在复合语句中有效

随着函数调用的结束或复合语句的结束,局部变量的声明周期也会结束

如果没有初始值,则内容是随机的

2、个案

#包含

voidtest () )

//auto写还是不写是一样的//auto只出现在{}的内部

auto int b=10;

}intmain(void ) ) ) )。

{//b=100; //err,main作用域中没有b

if(1)。

//在复合语句中定义,仅在复合语句中有效

int a=10;

printf(a=%d(n ),a );

}//a=10; //err为if ) )的复合句,a不再存在

返回0;

}

使用局部变量方案

# define _ CRT _ secure _ no _ warnings # include # include # include # include # include

这是语音功能01 (inta )

{return 0;

}intmain(void ) ) ) )。

//局部变量//定义变量:局部变量函数内部定义的变量由auto限定,对堆栈区域使用//作用域。 函数内部//生命周期:从创建到函数结束//局部变量未初始化,值变为乱码

auto int a=10;

printf(%d(n ),a ); //局部变量I仅用于for循环

for(intI=0; i 10; I )

{break;

}return 0;

}

局部变量使用示例: 2

三.全球变量

1、说明

在函数外定义的变量可以由本文和其他文档中的函数共享。 如果其他文档中的函数调用此变量,则必须在extern中声明

全局变量的生命周期与程序的执行周期相同

不同文件中的全局变量不能重复

2、个案

# define _ CRT _ secure _ no _ warnings # include # include # include # include # include

//全局变量//全局变量、函数外部定义的变量、保存数据区域、局部变量和可重命名//范围:整个项目中的所有文件,如果在其他文件中使用,则为extern//生命周期

extern int a=10; 入主(void ) )。

{

printf(%d(n ),a ); int a=123; //匿名内部函数,已放弃

{int a=123456;

printf(%d(n ),a );

//数据在操作时采用相近原则

printf(%d(n ),a ); 返回0;

}

全局变量使用示例

四.静态局部变量

1、说明

静态局部变量的作用域在定义的函数中也有效

静态局部变量的生命周期与程序的执行周期相同。 此外,staitc局部变量的值只初始化一次,但可以多次分配

如果没有为静态局部变量分配初始值,则会由系统自动分配。 数值型变量自动分配初始值0,文字型变量分配空白字符

2、案例

#include

voidfun1()

{int i = 0;

i++;

printf("i = %dn", i);

}voidfun2()

{//静态局部变量,没有赋值,系统赋值为0,而且只会初始化一次

static inta;

a++;

printf("a = %dn", a);

}int main(void)

{

fun1();

fun1();

fun2();

fun2();return 0;

}

静态局部变量 使用案例

#define _CRT_SECURE_NO_WARNINGS#include#include#include#include#include

voidfun04()

{//静态局部变量//静态局部变量只会初始化一次,可以多次赋值//正常局部变量函数执行完后会被销毁//在数据区进行存储//作用域:只能在函数中使用//生命周期:从程序创建到程序销毁//静态局部变量未初始化、值为0

static int b = 10;

b++;

printf("%dn", b);

}int main(void)

{for (int i = 0; i < 10; i++)

{

fun04();

}return 0;

}

静态局部变量 使用案例:2

五、静态(static)全局变量

1、说明

在函数外定义,作用范围被限制在所定义的文件中

不同文件静态全局变量可以重名,但作用域不冲突

static全局变量的生命周期和程序运行周期一样,同时staitc全局变量的值只初始化一次

2、案例

#define _CRT_SECURE_NO_WARNINGS#include#include#include#include#include

//静态全局变量//作用域:可以在本文件中使用、不可以在其他文件中使用//生命周期:程序创建到程序销毁//静态全局变量未初始化、值为0

static int c = 10;int main(void)

{

printf("%dn", c);return 0;

}

静态全局变量 使用案例

六、extern全局变量声明

声明一个变量,这个变量在别的文件中已经定义了,这里只是声明,而不是定义。

extern int a;

静态函数与全局函数

一、函数作用域

在C语言中函数默认都是全局的,使用关键字static可以将函数声明为静态,函数定义为static就意味着这个函数只能在定义这个函数的文件中使用,在其他文件中不能调用,即使在其他文件中声明这个函数都没用。对于不同文件中的staitc函数名字可以相同。

注意:

允许在不同的函数中使用相同的变量名,它们代表不同的对象,分配不同的单元,互不干扰。

同一源文件中,允许全局变量和局部变量同名,在局部变量的作用域内,全局变量不起作用。

所有的函数默认都是全局的,意味着所有的函数都不能重名,但如果是staitc函数,那么作用域是文件级的,所以不同的文件static函数名是可以相同的。

二、全局函数案例

#define _CRT_SECURE_NO_WARNINGS#include#include#include#include#include

//全局函数//添加函数声名

voidfun03();//函数可以调用自己、称为递归函数

int main(void)

{//全局函数名称是作用域中唯一的//作用域:在整个项目中所有文件中使用//存储区域:代码区

fun03();return 0;

}

全局函数 使用案例

三、静态函数案例

#define _CRT_SECURE_NO_WARNINGS#include#include#include#include#include

//静态函数//作用域:当前文件中//静态函数可以和全局函数重名//生命周期:重程序创建到程序销毁//存储区域:代码区

static voidfun03()

{

printf("%dn", 10);

}int main(void)

{

fun03();return 0;

}

静态函数 使用案例

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。