条件编译

Posted LC编程开发者

tags:

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

C语言提供了条件编译的语法,就是在编译源码的时候,可以选择性地编译指定的代码。例如我们开发一个兼容windows系统和linux系统运行的项目,那么,一些与操作系统密切相关的代码,就需要进行选择性编译。

       那么,我们学习了if条件判断语句,我们可以想到如下的思路:

int comple_w = 1;   //1值为编译windows代码,0值为编译linux代码;

if(1 == comple_w)

{

    编译windows代码;

}

else

{

    编译linux代码;

}

       那么,上面的逻辑思路,可以使用C语言提供的条件编译语法来实现。首先,我们来看看C语言提供的条件编译语法,有:

(1) #ifdef - #endif语句,使用格式如下:

#ifdef 标识符

    程序代码A

#endif

       关键字#ifdef 判断后面接的“标识符”是否为一个宏,如果是使用#define关键字来定义的一个宏,则编译程序代码A。如果“标识符”不是一个宏,则不会编译程序代码A。#ifdef关键字使用#endif关键字来结束。

(2) #ifdef - #else - #endif语句,使用格式如下:

#ifdef 标识符

    程序代码A

#else

    程序代码B

#endif

       关键字#ifdef配合#else使用,那么,如果“标识符”是定义的宏时,则编译程序代码A;如果“标识符”不是定义的宏时,则编译程序代码B。

(3) #ifndef - #endif 语句,使用格式如下:

#ifndef 标识符

    程序代码A

#endif

       当标识符“不是”一个定义的宏时,则编译程序代码A;否则,不编译程序代码A。

(4) #ifndef - #else - #endif 语句,使用格式如下:

#ifndef 标识符

    程序代码A

#else

    程序代码B

#endif

       当标识符“不是”一个定义的宏时,则编译程序代码A;否则,编译程序代码B。

(5) #if - #endif语句,使用格式如下:

#if 标识符

    程序代码A

#endif

       关键字#if判断标识符的值为真或假,如果是真,则编译程序代码A;如果是假,则不编译,对于“真”和“假”的定义,C语言把0值定义为假,把非0值定义为真。

(6) #if - #else - #endif语句,使用格式如下:

#if 标识符

    程序代码A

#else

    程序代码B

#endif

       关键字#if配合#else使用,判断标识符的值为真或假,如果是真,则编译程序代码A;如果是假,则编译程序代码B;

       程序测试例子如下:

       程序运行结果如下:

       可以看到,我们定义了ABC宏,那么,#ifdef ABC判断为真;没有定义WWW宏,所以,#ifndef WWW判断为真。

定义AAA的值为1,所以,#if AAA判断为真。对于#if关键字,可以直接使用如下:

#if 0

... //不编译的代码;

#endif

#if 1

... //总是编译的代码;

#endif

       所以,我们可以使用#if灵活控制那些代码可以编译和屏蔽。

总结

本章节我们学习了C语言预处理知识,可以使用#define指令来定义宏,使用#ifdef等指令来判断一个宏释放定义,然后,选择性地编译代码。

通过预编译指令,我们可以灵活地配置代码,不同的系统,编译不同的代码。让软件代码可以在不同系统平台上运行移植,提高系统的可移植性。

读者要仔细分析,掌握好每一个知识点,然后,自己总结出对该知识点的理解。自己总结出来的知识,理解才深刻,才是自己掌握的知识。

韦凯峰 Linux C/C++ 程序设计教程,Linux 系统编程,Openwrt 系统开发,微信:13926572996,QQ:1523520001,博客:www.mylinux.vip

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

十五宏条件编译和枚举

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

条件编译#ifdef的妙用详解_透彻

预处理——条件编译

条件编译

C语言条件编译(ifdefifndefendif)