条件编译在工作当中的应用

Posted 代二毛

tags:

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

什么是条件编译?

—般情况下,C语言源程序中的每一行代码都要参加编译。但有时候出于对程序代码优化的考虑。希望只对其中一部分内容进行编译。此时就需要在程序中加上条件,让编译器只对满足条件的代码进行编译,将不满足条件的代码舍弃,这就是条件编译。预处理程序提供了条件编译的功能。条件编译允许只编译源文件中满足条件的程序 段,使生成的目标程序较短,从而减少了内存的开销,并提高程序的效率,可以按不同的 条件去编译不同的程序部分,因而产生不同功能的目标代码文件。

在工作当中条件编译的应用场景:

假设现在有一个静态库,客户对其中某个功能提供了特殊需求,这种情况就可以使用条件编译。对该功能静态库里有两个分支的代码,通过编译时选择满足不同的条件来编译不同分支的代码,从而达到编译出不同功能的目标文件。这样说比较抽象,下面用代码来说明。

示例代码:

/*********Makefile中的语句********/
ifeq ($(type), 1)
	CFLAGS += -DTYPE //-D 是gcc用来添加宏定义的
endif

//生成可执行程序
gcc %.c CFLAGS

/*********.c文件里的代码********/
#include<stdio.h>

int main()
{
	int i;
		
#ifdef TYPE
	i = 1;
#else
	i = 2;
#endif
	printf("i = %d\\n", i);

	return;
}

代码解析:假设有一个Makefile文件,我这里的是不完整的,只是用于理解条件编译。当用“make type=1”来编译时,ifeq语句成立,在gcc编译时会定义"TYPE",这样在.c文件编译时#ifdef成立,此时“i=1”。当用“make”编译时,ifeq语句不成立,此时不会定义"TYPE",此时编译则“i=2”。这样就实现了通过不同的编译命令,经过条件编译,编译出了不同的目标文件。

以上是关于条件编译在工作当中的应用的主要内容,如果未能解决你的问题,请参考以下文章

自动刷新android片段,直到满足条件

导致资产预编译在heroku部署上失败的代码片段

片段和视图寻呼机

作用域是什么?

在 JSP 中的 <% %> 代码片段中添加链接

iOS代码片段CodeSnippets