C语言对象的作用域与生存期、Linux进程空间布局

作用域
作用域是什么?
一个对象起作用的范围。
变量(包含数组)
函数
类型

一个C语言程序(工程),可以包含多个.c和.h文件。
那么咱们可以将作用域分为几种情况:
a、整个工程作用域
在工程的所有文件中,都可以起作用。

b、本文件作用域
只在本文件(.c/.h)中起作用。

c、函数作用域/代码块作用域
仅在{}内起作用。

变量的作用域
(1) 全局变量: 定义在函数外面的变量
作用域: 整个工程作用域
1.c
int a = 5; //全局变量

2.c
在2.c中也可以使用1.C中a

(2) static修饰全局变量 (静态全局变量)
定义在函数外部的变量,只不过前面加了一个 static

static修饰全局变量,使得被修饰的全局变量的作用域发生改变,变成仅在本文件中有效!
1.c
static int a=5;
2.c
在2.c使用不了(即使使用外部声明也不行)

(3) 局部变量: 定义在{}内的变量,局部变量
局部变量的作用域: 代码块作用域
局部变量仅在定义它的{}内 “可见”

函数的作用域
(1) 整个工程作用域

1.c


			int sum(int a, int b)
			{
				return a+b;
			}

2.c
如果需要在2.c中去调用1.c的sum函数
只需在2.c中对sum函数进行声明

extern int sum(int a, int b) ;

(2) 本文件作用域

static修饰函数,会使得被修饰的函数的作用域变成 仅在本文件中有效。

1.c

static int sum(int a, int b)
			{
				return a+b;
			}

2.c
与变量作用域一样
extern int sum(int a, int b) ;外部声明也不行

类型的作用域
typedef :用来声明一个新的类型名
给一个已经存在的类型取一个别名。
typedef 存在的类型 新的类型名;

例子:

typedef int int32; 
			int a; 
		<=> int32 a; 

(1) 本文件作用域
1.c

typedef int int32;  

那么可以在整个1.c中去使用int32

2.c
如果在2.c中要使用 int32 这个类型名
必须要在2.c中 typedef int int32;

(2) 代码块作用域

		{
			typedef char char_8;
			
			char_8 A; 
		
		}
		
		{
			char_8 B;
		}

思考题:
1.c

		int a = 5;
		
		int main()
		{
			printf("%d\n", a);  //5
			
			int a = 6;
			printf("%d\n", a);   //6
			
			if(1)
			{
				int a = 7;
				printf("%d\n", a);  //7
			}
			
			
			printf("%d\n", a);  //6
		}

就近原则

生存期
是指一个对象从生到消亡的期间。

随文件系统持续性:
只要文件系统在,那么这个对象就一直存在。
如: 代码文件

随进程持续性:
进程: 一个正在运行的程序。
是指这个对象,在进程启动的时候,他就存在,并且一直持续到进程消亡。
进程启动时,就会给那些“随进程持续性”的对象,分配空间,并且这个空间
会一直持续到进程消亡。

如:
全局变量

函数

static修饰的局部变量(静态局部变量)

随代码块持续性:
是指这个对象,在运行它所属的代码块时,才分配空间给它,
并且当代码块执行完毕时,它的空间就会被自动回收。

如: 普通局部变量

“初始化” 和"初始化语句"
定义一个对象时,就给它赋值的语句,“初始化” “初始化语句”
初始化:
就是在给对象分配空间时,就会赋值。

初始化语句 :
只会在给对象分配空间时,执行一次。

Linux进程空间布局:
在这里插入图片描述

分段:
.data
.bss
.rodata


static 在C语言中的作用:
(1) static用于修饰全局变量或函数,作用是:
使得被修饰的全局变量或函数的作用域 变为仅在本文件中有效。

(2) static用于修饰局部变量,作用是:
使得被修饰的局部变量的生存期 随进程持续性。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ChampLixxx

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值