所谓“条件编译”,是对部分内容指定编译的条件,使其只在满足一定条件才进行编译。
常用形式
多条件编译
#if defined(MACRO1) || defined(MACRO2) code#elif defined(MACRO3) code#endif
常用格式
#ifdef MACRO code#else code#endif
#ifndef MACRO code#else code#endif
#if 表达式 code#else code#endif
示例
#include#include #define BUF_LEN 256int main(){ char buf[BUF_LEN]; snprintf(buf, sizeof(buf), "%s", "default");#if defined(POWER) || defined(PPP)//#if define POWER//#ifdef POWER snprintf(buf, sizeof(buf), "%s", "POWER||PPP");#elif defined(PPPOE) snprintf(buf, sizeof(buf), "%s", "PPPOE");#endif printf("power:%s\n", buf); return 0;}
执行结果:
yuxi@ubuntu:~/test/macro$ gcc -DPPP define.c yuxi@ubuntu:~/test/macro$ ./a.out power:POWER||PPPyuxi@ubuntu:~/test/macro$ gcc -DPPPOE define.c yuxi@ubuntu:~/test/macro$ ./a.out power:PPPOEyuxi@ubuntu:~/test/macro$ gcc define.c yuxi@ubuntu:~/test/macro$ ./a.out power:default
常见的预处理指令
- #空指令,无任何效果
- #include包含一个源代码文件
- #define定义宏
- #undef取消已定义的宏
- #if如果给定条件为真,则编译下面代码
- #ifdef如果宏已经定义,则编译下面代码
- #ifndef如果宏没有定义,则编译下面代码
- #elif如果前面的#if给定条件不为真,当前条件为真,则编译下面代码
- #endif结束一个#if……#else条件编译块
- #error停止编译并显示错误信息
参考: