关键字static#define 定义常量和宏

目录

关键字static

#define 定义常量和宏

粗略讲解数据的储存

源文件变成可执行文件的大概过程

数据的储存

在内存大致可以分为

栈区,堆区,静态区

栈区(储存局部变量,函数形参)

堆区(动态内存的储存)

静态区(储存静态变量,全局变量)

其中静态区数据的生命周期为整个程序的生命周期

源文件变成可执行文件的大概过程

源文件——预处理——编译——汇编——链接——可执行文件

1.static (静态的意思)可以修饰局部变量全局变量函数

修饰局部变量(可以使局部变量的生命周期变长)(本质上是改变了数据储存的位置,从栈区变到了静态区,数据出了它的作用域不被销毁)

如:

#include <stdio.h>
void test()
{
    static int a=1;//此处a为局部变量
    a++;
    printf("a=%d\n",a);
}
int main()
{
    int i=0;
    while(i<5)
    {
        test();
        i++;
    }
    return 0;
}

输出的结果是a=2,3,4,5,6。如果把static去掉则输出的结果是:2,2,2,2,2。

所以说明static修饰局部变量时使局部变量的生命周期变长了。

2,修饰全局变量 (改变了全局变量的作用域——让静态的全局变量只能在它自己的源文件中使用,出了该文件在另一个源文件中就不能使用)(本身全局变量是由外部链接属性的,但被static修饰之后不具备外部链接,变成了内部链接属性,其只能在自己的源文件中进行使用,在另一个源文件中无法使用) 

如:

一个文件

#include <stdio.h>
int main()
{
	extern int a;
	printf("%d\n", a);
	return 0;
}

另一个文件

​
static int a = 10;

​

编译器会报错,但如果去掉static则可以编译成功,打印的结果为10.

修饰函数:改变了函数的链接属性

static修饰函数与修饰全局变量差不多,会使外部链接属性变成内部链接属性)

如:文件1

#include <stdio.h>
int main()
{
	extern sum();
	int c = 0;
	c = sum(3, 6);
	printf("c=%d\n", c);
	return 0;
}

文件2

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

其中运行过程中会报错,就是上面我说的改变了文件的链接属性;但是如果去掉static则可以运行。

#define 定义常量和宏

#define 定义常量在前面的博客中已经提过

这是一般的定义函数

//这是一般的定义函数
#include <stdio.h>
int MAX(int x, int y)
{
	if (x>y)
    return x;
    else
    return y;
}
int main()
{
	int a=10,b=11;
	int c = MAX(a,b);
	printf("c=%d\n", c);
	return 0;
}

这是#define 的宏

#include <stdio.h>
#define MAX(x,y) (x>y?x:y)
int main()
{
	int a = 10, b = 11;
	int max = MAX(a, b);
	printf("max=%d", max);
	return 0;
}

注意define 并不是关键字,它是预处理指令

预处理指令从#开始

  • 14
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 9
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

easy_understand-ML

你的支持是对我创作的肯定

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

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

打赏作者

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

抵扣说明:

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

余额充值