梓益C语言学习总结

梓益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

梓益C语言学习总结