对于C语言的预处理命令:宏定义,文件包含(头文件引用),条件编译。 各自的概念在此不赘述,百度即可 【1】今儿主要是想理一下条件编译: 第一个: #if 条件 代码1 #elif 条件 代码2 #elif 条件 代码3 。 。 。 #endif 其实跟if(条件1){}else if(条件2){}else{}这个是一样的使用规则, 判断依据:或者情况比较,或者非0为真。验证如下:  第二个: #ifndef 宏名 | #ifdef 宏名 #define 宏名 。 。 。 #endif 很多人对这个宏名的情况不太清楚 1、首先这个宏名可以用户自己随便写,但是前提是符合命名规则 2、比如说: #ifndef FILE_C #define FILE_C void sub2() { } #endif 其中可以写成:#define FILE_C void sub(){ } 就相当于FILE_C 等价于 void sub(){ },所以这些横着写你就一下子容易联系到之前写的宏定义 比如:#define led P0 ( led等价于P0) 所以:   (这里不规范自己将.c文件引用为头文件,只是为了说明问题,简单些)三个头文件在编译器编译的时候,发现sub2()被定义了两次(会编译报错)。如果见c.c文件内容改成上面条件编译,那么如果没有定义FILE_C(也就是sub2()函数),才会执行下面的#define代码,但是显然前面b.c文件以及定义过sub2()函数了,所以就不会执行下面的#define代码,不会再重新定义sub2()函数了。
【2】对于头文件的引用,一般遇到的疑问比如说就是头文件1里声明相应的函数,但是函数实体在其他源文件1中编写,而另一个源文件2要调用前源文件1的函数,只需要调用前头文件1即可,一般多个文件都是在一个项目工程内,负责处理这个问题的是相应的编译器(预处理→编译→链接)。
|