A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

1.为什么要使用条件编译?
1)按不同的条件取编译不同的程序部分,因而产生不同的目标代码文件,有利于程序的一直和调试

2)条件 编译当然也可以用条件语句来实现,但是用条件语句将会对整个源程序进行编译,生成的目标代码程序很长,而采用了条件编译,则根据条件只编译其中的程序段1或程序段4,生成的目标程序较短。

2.条件编译
发生在预处理阶段,在编译前做的事情
【核心】:根据条件编译指定的代码
条件不同,编译的部分也不同,生成的目标文件(.o)大小也不同
  1. #define score 89
  2. #include <stdio.h>

  3. int main(int argc, const char * argv[])
  4. {
  5.    /* int score = 89;
  6.     //用if条件语句实现,编译后(.o)文件的大小是1,172 bytes
  7.     score /=10;

  8.     if (score < 6) {
  9.         printf("E");
  10.     } else if (score < 7) {
  11.         printf("D");
  12.     }
  13.     else if (score < 8) {
  14.         printf("C");
  15.     }
  16.     else if (score < 9) {
  17.         printf("B");
  18.     }
  19.     else{
  20.         printf("A");
  21.     }*/
  22. //使用条件编译,(.o)文件 836 bytes
  23. #if score < 6 //此处不能使用普通变量,要用宏定义
  24.      printf("E");
  25. #elif score < 7
  26.      printf("D");
  27. #elif score < 8
  28.      printf("C");
  29. #elif score < 9
  30.      printf("B");
  31. #else
  32.      printf("A");
  33. #endif //这个必须有,有#if配对
  34.     return 0;
  35. }
复制代码



3、#ifdef 用来判断某个宏是否定义
例如:
  1.     int a = 0;
  2. #ifdef AMOS//检测宏DEBUG1是否定义,若果定义了,a=10,对应的#ifndef,如果没有定义
  3.     a = 10;
  4. #else
  5.     a = 100;
  6. #endif
  7.     printf("a = %d\n",a);
复制代码



4、使用条件编译调试程序

  1. #define AMOS 0
  2. #include <stdio.h>
  3. //使用条件编译调试程序

  4. #if AMOS == 1
  5. //显示调试信息
  6. #define Log(format,...) printf(format,## __VA_ARGS__);
  7. #else
  8. //不显示调试信息
  9. #define Log(format,...)
  10. #endif



  11. int main(int argc, const char * argv[])
  12. {
  13.     int a = 0;
  14. #ifdef DEBUG1 //检测宏DEBUG1是否定义,若果定义了,a=10,对应的#ifndef,如果没有定义
  15.     a = 10;
  16. #else
  17.     a = 100;
  18. #endif
  19.     Log("------------------>a = %d\n", a);
  20.    return 0;
  21. }
复制代码


打印结果:
当AMOS = 1时:
------------------>a= 100
当AMOS = 0时:
没有打印任何信息

1 个回复

倒序浏览
很好的总结!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马