1.为什么要使用条件编译? 1)按不同的条件取编译不同的程序部分,因而产生不同的目标代码文件,有利于程序的一直和调试
2)条件 编译当然也可以用条件语句来实现,但是用条件语句将会对整个源程序进行编译,生成的目标代码程序很长,而采用了条件编译,则根据条件只编译其中的程序段1或程序段4,生成的目标程序较短。
2.条件编译 发生在预处理阶段,在编译前做的事情 【核心】:根据条件编译指定的代码 条件不同,编译的部分也不同,生成的目标文件(.o)大小也不同 - #define score 89
- #include <stdio.h>
-
- int main(int argc, const char * argv[])
- {
- /* int score = 89;
- //用if条件语句实现,编译后(.o)文件的大小是1,172 bytes
- score /=10;
-
- if (score < 6) {
- printf("E");
- } else if (score < 7) {
- printf("D");
- }
- else if (score < 8) {
- printf("C");
- }
- else if (score < 9) {
- printf("B");
- }
- else{
- printf("A");
- }*/
- //使用条件编译,(.o)文件 836 bytes
- #if score < 6 //此处不能使用普通变量,要用宏定义
- printf("E");
- #elif score < 7
- printf("D");
- #elif score < 8
- printf("C");
- #elif score < 9
- printf("B");
- #else
- printf("A");
- #endif //这个必须有,有#if配对
- return 0;
- }
复制代码
3、#ifdef 用来判断某个宏是否定义 例如: - int a = 0;
- #ifdef AMOS//检测宏DEBUG1是否定义,若果定义了,a=10,对应的#ifndef,如果没有定义
- a = 10;
- #else
- a = 100;
- #endif
- printf("a = %d\n",a);
复制代码
4、使用条件编译调试程序
- #define AMOS 0
- #include <stdio.h>
- //使用条件编译调试程序
-
- #if AMOS == 1
- //显示调试信息
- #define Log(format,...) printf(format,## __VA_ARGS__);
- #else
- //不显示调试信息
- #define Log(format,...)
- #endif
-
-
-
- int main(int argc, const char * argv[])
- {
- int a = 0;
- #ifdef DEBUG1 //检测宏DEBUG1是否定义,若果定义了,a=10,对应的#ifndef,如果没有定义
- a = 10;
- #else
- a = 100;
- #endif
- Log("------------------>a = %d\n", a);
- return 0;
- }
复制代码
打印结果: 当AMOS = 1时: ------------------>a= 100 当AMOS = 0时: 没有打印任何信息
|