关键词static(extern)修饰局部变量、全局变量、函数;#define定义常量和宏

一,static

在c语言中,static是用来修饰变量和函数的

1.修饰局部变量-称为静态局部变量

2.修饰全局变量-称为静态全局变量

3.修饰函数-称为静态函数

1)static修饰局部变量

关键词static(extern)修饰局部变量、全局变量、函数;#define定义常量和宏_第1张图片

//大家可能都认为输出的会是6-16 但是a是在void text()中的加入了int main()会自动销毁,所以当while循环再次加入text会重新创建时a依然是5 然后再加1,执行10次

我们可以看出局部变量是加入他的范围创建,出了他的变量销毁

但当static修饰时关键词static(extern)修饰局部变量、全局变量、函数;#define定义常量和宏_第2张图片

static修饰局部变量的时候,局部变量就变成了静态的局部变量,出了局部的变量,不会销毁,下一次加入函数依然存在。其实是因为:static修饰的局部变量是存储在静态区的

所以在static修饰的变量里,a是可以实现跨范围的自加的,不会销毁

关键词static(extern)修饰局部变量、全局变量、函数;#define定义常量和宏_第3张图片

 

原本int定义的变量是在栈区里面的,但被static修饰后就到静态区里了

静态区的特点就是出来他的范围是不销毁的

2)static修饰全局变量

先添加一个新的.c文件,如何在add.c上定义一个变量

 查看man.c中是否可以运用g_nal变量关键词static(extern)修饰局部变量、全局变量、函数;#define定义常量和宏_第4张图片

 答案是肯定的在不加任何修饰的情况下不能跨文件运用

这时候extern就格外注意了,extern:用来声明外部变量的

关键词static(extern)修饰局部变量、全局变量、函数;#define定义常量和宏_第5张图片

在运用extern声明后就可以实现跨文件运用了

但是::当在add.c文件中用static修饰int g_nal时

就会出现警告

所以static的作用关键词static(extern)修饰局部变量、全局变量、函数;#define定义常量和宏_第6张图片

所以难道static修饰全局变量有什么用呢?用处大着,作用域不是越大越好,当年不想让别人看见时就可以在你的文件加上static等等

3)stctic修饰函数

当我们想计算两个数时我们可能会关键词static(extern)修饰局部变量、全局变量、函数;#define定义常量和宏_第7张图片

 这样看来是没有任何问题的,这说明这个函数是具有外部链接属性的,主要合理地声明就可以实现跨文件使用的

但是会出现警告

那么如何避免这个警告呢?就要运用到extern了

关键词static(extern)修饰局部变量、全局变量、函数;#define定义常量和宏_第8张图片

 这样就不会出现警告了

但是当我们在int ADD前加上static后会出现什么呢?

关键词static(extern)修饰局部变量、全局变量、函数;#define定义常量和宏_第9张图片

static修饰函数的作用:函数本身是具有外部链接属性的,但是在static修饰后变成了内部链接属性了,只能在原文件内部里使用,其他文件是无法使用的

使用上的感觉是作用域变小了

 二,#define定义的常量和宏

define定义常量:

关键词static(extern)修饰局部变量、全局变量、函数;#define定义常量和宏_第10张图片

输出:1000

关键词static(extern)修饰局部变量、全局变量、函数;#define定义常量和宏_第11张图片

 //在电脑中的运行顺序

 define定义宏:

举例:在一般的求两个数的较大值我们会

关键词static(extern)修饰局部变量、全局变量、函数;#define定义常量和宏_第12张图片

但是如果我们用#define定义宏去完成会更加便利:

关键词static(extern)修饰局部变量、全局变量、函数;#define定义常量和宏_第13张图片宏在定义的时候没有类型

 关键词static(extern)修饰局部变量、全局变量、函数;#define定义常量和宏_第14张图片

 对于上面的表达#define MAX(x,y) (x>y?x:y)

           最好写成:#define MAX(x,y) ((x)>(y)?(x):(y))

能用括号就用括号!!!

 宏和函数都可以用,大家选择自己觉得适合自己的去使用,不一定非要用宏!!

你可能感兴趣的:(c语言,c++,开发语言)