条件编译使用分析

条件编译类似C语言  “ if .....else.... ”,从大量代码中,通过预处理的方式对代码进行预删除的工作

条件编译本质是对代码进行选择性的预处理操作后的编译操作,只对符合要求的代码进行编译

/* 通常采用 #ifdef             
..... #else(#elif) ...... #endif 表示
*/
#define micro LINUX int main(){ #ifdef micro == LINUX printf("use linux"); #else printf("use other environment"); #endif
return 0;
}

 

上述这种方法是提前通过宏定义来定义一个变量STR,从而通过判段变量值选择编译内容,当然除了这种方法之外是否可以在其他地方对其定义,或把这些宏定义放在统一个文件内,这样在选择编译内容时,只需要修改文件内容即可,而不必打开每个.c文件了呢?

第一种:

gcc  -Dmacro = LINUX file.c     // macro == LINUX,则执行LINUX 代码
gcc -Dmacro file.c // 如果定义了macro,则执行相应代码

#include 本质:

将已经存在的文件内容嵌入到当前文件中。在编译的该文件时,编译器会将#include 包含的文件全部复制到当前文件下,供文件使用。

其实,#include的本质很好理解,但是存在一个重复包含的问题,比如:

 

 

上图这种情况,就是头文件间接包含的问题,如果在头文件内部定义了一个常量或变量时,在编译的过程就会因重复定义而报错。(编译的时候会将 global.h 复制两遍)

但是在实际工程应用中,成百上千的文件引用,不免出现文件包含的问题,如果严格按照上面的要求,筛查工作就显得很困难。因此,可以采用条件编译的方式解决:

// global.h
#ifndef _GLOBAL_H_
#define _GLOBAL_H_
global = 1;
#endif

 

posted @ 2023-04-03 01:03  嵌入式小白—  阅读(38)  评论(0编辑  收藏  举报