条件编译使用分析

Posted lianglianglu

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了条件编译使用分析相关的知识,希望对你有一定的参考价值。

条件编译类似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,则执行相应代码

 

第22课 条件编译使用分析

条件编译的基本概念:

技术分享图片

 

条件编译就是利用预处理器的功能来对代码进行一些删除操作。

程序示例:

 1 #include <stdio.h>
 2 
 3 #define C 1
 4 
 5 int main()
 6 {
 7     const char* s;
 8 
 9     #if( C == 1 )
10         s = "This is first printf...
";
11     #else
12         s = "This is second printf...
";
13     #endif
14 
15     printf("%s", s);
16     
17     return 0;
18 }

运行结果如下:

技术分享图片

 

单步编译的结果如下:

技术分享图片

 

条件编译的本质:

技术分享图片

 

通过命令行定义宏:

程序与运行结果如下:

技术分享图片

 

 

如果我们判断一个宏标识符是否存在,需要使用#ifdef指令。示例如下:

技术分享图片

 

执行单步编译:

技术分享图片

 

中间结果如下:

技术分享图片

 

以上是关于条件编译使用分析的主要内容,如果未能解决你的问题,请参考以下文章

第22课 条件编译使用分析

条件编译及编译预处理阶段分析与总结--笔记

#error和#line使用分析

第23课 #error 和 #line 使用分析

Rosyln入门-C#语义分析

第19课 编译过程简介