一般情况下,在进行编译时对源程序中的每一行都要编译。但是有时希望程序中某一部分内容只在满足一定条件时才进行编译,也就是指定对程序中的一部分内容进行编译的条件。如果不满足这个条件,就不编译这部分内容。这就是“条件编译”。(可以有机会让编译器听你的话啦!)
有时,希望当满足某条件时对一组语句进行编译,而当条件不满足时则编译另一组语句。
例如,最近涉及到的,Qt环境下创建Dll以供其他项目调用(Shared Libraries )。
#include <QtCore/QtGlobal>
#ifdef MYSHAREDLIB_LIBRARY
#def MYSHAREDLIB_EXPORT Q_DECL_EXPORT
#else
#def MYSHAREDLIB_EXPORT Q_DECL_IMPORT
#endif
以前觉得条件编译没有什么用,现在发现就是自己在工作中没有遇到过,才很幼稚的以为没有用罢了。就像大学时候没有实践,学的东西提不上来兴趣。先上例子,这样有使用环境,知识理解起来也不难了。
条件编译命令常用的有以下形式:
#ifdef 标识符
程序段1
#else
程序段2
#endif
它的作用是当所指定的标识符已经被#define命令定义过,则在程序编译阶段只编译程序段1,否则编译程序段2。#endif用来限定#ifdef命令的范围。其中#else部分也可以没有。
#if 表达式
程序段1
#else
程序段2
#endif
它的作用是当指定的表达式值为真(非零)时就编译程序段1,否则编译程序段2。可以事先给定一定条件,使程序在不同的条件下执行不同的功能。
我一般都是写书上的练习题会用到上面的第二种条件编译形式。把之前写的函数或者模块用#if-#endif注掉,条件编译和注释很像嘛。