条件编译
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
以上是关于条件编译的主要内容,如果未能解决你的问题,请参考以下文章