ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
### 条件编译指令 - 条件编译指令就是有条件地编译,当满足某条件时,对一组语句进行编译,当条件不足时编译另一组语句。 #### #if指令 **#if指令一般与#else和#elseif指令组合使用格式为:** #if 表达式 程序段 #else 程序段2 #endif 由于条件编译指令是在预处理阶段执行的,因此表达式必须为宏表达式: #include <stdio.h> #define NUM 'c' int main() { #if NUM=='e' printf("The treasure of pirate is buried under your bed.\n"); #else printf("海盗的宝藏就埋在你床下。\n"); #endif return 0; } #### 注意:关于#if……#else……#endif的注意有2点 - #if要对表达式的值进行判断,因此不能仅定义宏而不给出宏体,要给出宏所代表的值 - 条件编译#if……#else……#endif与条件语句if……else功能虽然相同,但是两者时间开销不同,条件编译只编译满足条件的程序段,可以有效地减少被编译的语句,从而缩短源代码的长度,进而达到缩短程序执行时间的目的,条件语句不能减少被编译的语句,因此无法缩短程序的执行时间 #### #elif指令 #### **#elif和else if相似,只是编译时不同,对于else if 来说,无论它所检测的条件是否满足,该条件对应的语句都会被编译,但是对于#elif来说,当给定条件不满足时,该条件对应的语句不会被编译** #include <stdio.h> #define WORD 'c' int main() { #if WORD=='e' printf("I love you.\n"); #elif WORD=='d' printf("Ich liebe Dich.\n"); #elif WORD=='f' printf("Je t'aime.\n"); #else printf("ÎÒ°®Äã¡£\n"); #endif//用于结束条件编译 return 0; } #### #ifdef指令 **该指令检测的不是宏代表的值,而是宏是否被定义** ~~~ #include <stdio.h> #define MOD int main() { #ifdef MOD//检测一个宏是否被定义 printf("MOD被定义。\n"); #endif printf("程序结束。\n"); return 0; } ~~~ #### #ifndef的应用 #### **#ifndef可以防止重复定义** 重复定义:如果将一个book.h在一个源文件中包含2次,则book结构类型就被定义了2次。 如果main.c文件中包含了book.h和goods.h,而goods.h中又包含了book.h则main.c中就包含了两次book.h。为了解决这种由重复而造成的重复定义需要将book.h修改一下 如下所示: book.h内容如下: #ifndef BOOK //假如没有定义BOOK #define BOOK //定义BOOK struct book //定义book结构类型 { char name[10]; double price; }; #endif//结束条件编译 goods.h内容如下: #ifndef BOOK //假如没有定义BOOK #define BOOK //定义BOOK #include "goods.h" struct goods //定义book结构类型 { char name[10]; double price; }; #endif//结束条件编译 main.c内容如下: #include <stdio.h> #include "book.h" #include "goods.h" int main() { struct book Wild={"教父",42.00}; printf("%-12s%-12s\n","书名","价格"); printf("%-12s%-12.2f\n",Wild.name,Wild.price); return 0; } 这样就不会出现重复定义