梓益C语言学习总结
一、静态变量与普通变量的区别
1.1,普通的全局变量
概念:
在函数外部定义的变量
作用范围:
全局变量的作用范围,是程序的所有地方。
只不过用之前需要声明。声明方法extern int num;,声明的时候,不要赋值。
生命周期:
程序运行的整个过程,一直存在,直到程序结束。
注意:定义普通的全局变量的时候,如果不赋初值,它的值默认为0
1.2,静态全局变量,static
概念:
定义全局变量的时候,前面用静态修饰。
作用范围:
静态限定了静态全局变量的,作用范围
只能在它定义的c(源文件)中有效
生命周期:
在程序的整个运行过程中,一直存在。
注意:定义静态全局变量的时候,如果不赋初值,它的值默认为0
2.1,普通的局部变量
概念:
在函数内部定义的,或者复合语句中定义的变量
作用范围:
在函数中定义的变量,在函数中有效
在复合语句中定义的,在复合语句中有效。
生命周期:
在函数调用之前,局部变量不占用空间,调用函数的时候,才为局部变量开辟空间,函数结束了,局部变量就释放了。
在复合语句中定义的亦如此。
注意:定义局部变量的时候,如果不赋初值,它的值为随机值
2.2,静态的局部变量
概念:
定义局部变量的时候,前面加静态修饰
作用范围:
在它定义的函数或复合语句中有效。
生命周期:
第一次调用函数的时候,开辟空间赋值,函数结束后,不释放,以后再调用函数的时候,就不再为其开辟空间,也不赋初值,
用的是以前的那个变量。
注意:
1:定义普通局部变量,如果不赋初值,它的值是随机的。
2:定义静态局部变量,如果不赋初值,它的值是0
3:普通全局变量和静态全局变量如果不赋初值,它的值为0
二,头文件路径
# include<比;,在系统路径下查找头文件
# include ",在当前目录下查找头文件
三,+ +先调用了再把它的值加一,+ +一个先把一个的值加一再调用一个
四、宏定义,#定义
1,宏定义后不加分号,宏定义的值不能改变
2,宏是在预编译的时候进行替换,无变量,不占内存
3,宏定义可以防止不知含义的数字出现,方便修改
4,可以定义任何类型
不带参宏
#定义,π,3.14
在预编译的时候如果代码中出现了π就用3.14去替换。
宏的好处:只要修改宏定义,其他地方在预编译的时候就会重新替换。
终止宏:# undef,π//终止π的作用
带参宏(宏函数)
# define S (a, b) (a) * (b)
注意带参宏的形参a和b没有类型名,
S(2、4)将来在预处理的时候替换成实参替代字符串的形参,其他字符保留,(2)* (4)
五条件编译(选择性编译)
# ifdef,AAA
代码段一号
其他代码段二# endif
如果在当前。c ifdef上边定义过AAA,就编译代码段一,否则编译代码段二
常用在. h文件头部,如:文件有趣。h开头写上
的ifndef, FUN_H
, # define FUN_H
,,.......代码段.......# endif
防止乐趣。h文件被重复引用
六、动态库和静态库
一:动态编译
动态编译使用的是动态库文件进行编译
gcc,你好。c, o,你好
咱们使用的是动态编译方法,
二:静态编译
静态编译使用的静态库文件进行编译
gcc,静态,你好。c, - o你好
三:静态编译和动态编译区别
1:使用的库文件的格式不一样,动态编译使用动态库,静态编译使用静态库
注意:
1:静态编译要把静态库文件打包编译到可执行程序中。
2:动态编译不会把动态库文件打包编译到可执行程序中,它只是编译链接关系
制作静态库:c文件mylib。c
gcc - c mylib。c - o mylib.o生成mylib。o
ar rc libtestlib。一个mylib.o生成静态库libtestlib.a
注意:静态库起名的时候必须以自由开头以。一个结尾
编译程序:gcc静态mytest。c libtestlib。- o mytest
制作动态链接库:gcc, shared mylib。c, - o libtestlib。//使用gcc编译,制作动态链接库
动态链接库的使用:gcc mytest。c libtestlib。所以,- o, mytest