---------------- ASP.Net+Unity开发、.Net培训、期待与您交流!----------------
《C语言22-预处理指令1宏定义》学习总结
1、C语言在编译之前,会先对一些预处理指令作解释,产生新的源程序,这个过程称为编译预处理。
2、预处理指令以#开头,并且结尾没有分号。
3、将预处理指令写在源程序开头,它的作用范围是预处理指令之后的整个源程序文件。
4、C语言提供的预处理指令主要有:宏定义、文件包含、条件编译。
5、宏定义分为不带参数的宏定义和带参数的宏定义。
6、不带参数的宏定义的一般形式:#define 宏名 字符串,宏名一般大写,字符串可省略。
7、宏定义的作用是在预编译处理时,将源程序中的所有宏名替换成字符串,不会作语法检查。
8、宏定义不会对字符串内的字符作替换操作。
9、定义一个宏时可引用已经定义的宏名。
10、如需终止宏定义的作用域,可以用#undef命令。
11、带参数的宏定义的一般形式:#define 宏名(参数列表) 字符串。
12、带参数的宏定义作用是在预编译处理时,将源程序中的所有宏名替换成字符串的同时将字符串中的参数用宏名右边参数列表中的参数替换。
13、宏名和参数列表之间不能有空格,否则空格后面的所有字符串都作为替换的字符串。
14、建议将宏定义的参数和计算结果放入小括号。
15、宏定义不涉及存储空间的分配、参数类型匹配、参数传递、返回值等。
16、带参数的宏比函数具有更高的执行效率。
《C语言23-预处理指令2条件编译》学习总结
1、条件编译:程序的其中一部分代码只有在满足一定条件时才进行编译,否则不参与编译。
2、条件编译示例。
//如果条件成立,就将code1编译进去
#if MAX == 0
...code1...
//如果条件成立,就将code2编译进去
#elif MAX > 0
...code2...
//如果条件都不成立,将code3编译进去
#else
...code3...
#endif
//如果MAX这个宏已定义,就将code3编译进去.
#if defined(MAX)
...code3...
#endif
//如果MAX这个宏已定义,就将code4编译进去.
#ifdef MAX
...code4...
#endif
//如果MAX这个宏没定义,就将code5编译进去.
#if !defined(MAX)
...code5...
#endif
//如果MAX这个宏已定义,就将code6编译进去.
#ifndef MAX
...code6...
#endif
《C语言24-预处理指令3文件包含》学习总结
1、#include指令可以将一个文件的全部内容拷贝到当前文件中。
2、#include <文件名>:直接到C语言库函数头文件所在的目录中查找文件。
3、#include “文件名”:系统会先在源程序当前目录下查找,再到path路径中查找,最后到C语言库函数头文件所在的目录中查找。
4、#include指令允许嵌套包含,不允许递归包含。
5、避免重复包含的头文件示例。
//解决重复包含同一个头文件
#ifndef _ONE_H_
#define _ONE_H_
void one();
#endif
《C语言25-变量类型》学习总结
1、C语言根据变量作用域的不同,将变量分为局部变量和全局变量。
2、在函数内部定义的变量,称为局部变量,作用域:定义它的函数内部。
3、在所有函数外部定义的变量,称为全局变量,作用域:从定义变量之后的整个源文件。
4、C语言根据变量的存储类型不同,将变量分为:自动变量、静态变量、寄存器变量。
5、被关键字auto修饰的局部变量是自动变量,存储在堆栈中,局部变量默认是自动变量。
6、自动变量生命周期:程序执行到声明自动变量的代码块时,自动变量才被创建,当自动变量所在的代码块执行完毕后,自动变量就会自行销毁。
7、被关键字static修饰的局部变量是全局变量,存储在静态内存中,全局变量默认是静态变量。
8、静态变量生命周期:在程序运行前创建,在程序整个运行期间始终存在,直到程序结束。
9、被关键字register修饰的自动变量是寄存器变量,只有自动变量才能是寄存器变量,并且只限于int、char和指针类型变量。
10、寄存器变量存储在硬件寄存器中,由于数目限制,不能使用太多寄存器变量,将频繁使用的自动变量定义为寄存器变量可以大大提高运算速度。
《C语言26-extern与函数》学习总结
1、外部函数:如果当前文件中定义的函数允许其他文件访问、调用,就称为外部函数,外部函数不允许同名。
2、内部函数:如果在当前文件中定义的函数不允许其他文件访问、调用,只能在内部使用,就称为内部函数。不同的源文件中内部函数可以同名。
3、在定义函数时,如果在函数的最左边加上关键字extern,则表示函数是外部函数,定义函数默认是外部函数。
4、在一个文件中要调用其他文件的外部函数,则需要在当前文件中用extern声明该外部函数,extern也可以省略。
《C语言27-static与函数》学习总结
1、在定义函数时,在函数的最左边加上static可以把函数定义为内部函数。
2、关键字static也可以用来声明一个内部函数。
《C语言28-extern与变量》学习总结
1、关键字extern可以用来声明一个全局变量,但不能用来定义变量。
2、一个全局变量可以供多个源文件共享,多个源文件中同名的全局变量都代表着同一个变量。
《C语言29-static与变量》学习总结
1、static全局变量只初始化一次,防止在其他文件单元中被引用。
2、static局部变量只被初始化一次,下一次依据上一次结果值。
《C语言30-结构体》学习总结
1、数组内部的每一个元素必须是相同类型的,结构体内部的元素可以是不同类型的。
2、struct关键字是结构体类型的标志,结构体内部的元素称为成员。
3、结构体变量的定义方式:先定义结构体类型再定义变量、定义结构体类型的同时定义变量、省略类型名直接定义结构体类型变量。
4、结构体不允许本身递归定义,但可以包含别的结构体。
5、定义结构体类型时并不分配内存空间,只有在定义属于结构体类型的变量时,系统才会分配存储空间给变量。
6、结构体变量占用的内存空间是其成员所占内存空间之和,而且各成员在内存中按定义的顺序依次排列。
7、结构体的初始化:将各成员的初值按顺序放在一对大括号中,并用逗号分隔,一一对应赋值,结构体只能在定义变量的同时进行初始化赋值。
8、引用结构体变量成员一般形式为:结构体变量名.成员名,点称为成员运算符,优先级是最高的。
9、如果某个成员也是结构体变量,可以连续使用成员运算符访问下一级的成员。
10、相同类型的结构体变量之间可以进行整体赋值。
11、结构体数组跟普通数组的用法相同,只不过每个元素都是一个结构体。
12、结构体变量作为函数参数进行传递时,其实传递的是全部成员的值,形参的改变不会影响到实参。
13、结构体指针变量的定义形式:struct 结构体名称 *指针变量名。
《C语言31-枚举》学习总结
1、枚举是一种基本数据类型,当一个变量有几个固定的可能取值时,可以将这个变量定义为枚举类型。
2、枚举类型的定义:enum 枚举名 {枚举元素1,枚举元素2……}。
3、枚举变量的定义:先定义枚举类型再定义枚举变量、定义枚举类型的同时定义枚举变量、省略枚举名称直接定义枚举变量。
4、C语言编译器会将枚举元素作为整型常量处理,称为枚举常量。
5、枚举的值取决于定义时各枚举元素排列的先后顺序,没有指定值的元素,其值为前一个元素加1,默认第一个枚举的值为0。
6、可以给枚举变量赋值枚举常量或整型值。
《C语言32-typedef》学习总结
1、typedef关键字可以为各种数据类型定义一个别名,也可以在别名的基础上再起一个别名。
2、typedef可以给指针、结构体和枚举类型起别名,当然也可以给指向结构体的指针和函数的指针起别名。
3、typedef是给数据类型定义一个别名,#define只是替换代码中的宏名,他们是有很大区别的。