调试开关:
当出现问题时,程序员定位的时候,会打开调试开关进行查看。
而平时的时候,不让用户看到。既可以使交付的二进制代码,有能不让用户看到多余的乱七八糟的输出。
例1:
实验一:
步骤1:vim test.c
#include<stdio.h>
void main(){
#ifdef DEBUG
printf("Debug is open\n");
#else
printf("Debug is not open");
#endif
}
步骤2:gcc -E test.c -o test.i //预编译
步骤3:vim test.i
....
void main(){
printf("Debug is not open\n"); //预编译之后,发现只有这一句话。因为没有定义DEBUG。
}
实验二:
步骤1:vim test.c
#include<stdio.h>
#define DEBUG
void main(){
#ifdef DEBUG
printf("Debug is open\n");
#else
printf("Debug is not open");
#endif
}
步骤2:gcc -E test.c -o test.i //预编译
步骤3:vim test.i
....
void main(){
printf("Debug is open\n"); //预编译之后,发现只有这一句话。因为定义了DEBUG。
}
实验三:
步骤1:vim test.c
#include<stdio.h>
void main(){
#ifdef DEBUG
printf("Debug is open\n");
#else
printf("Debug is not open");
#endif
}
步骤2:gcc -E test.c -o test.i -D DEBUG //预编译。通常我们不在程序里面,而是预编译的时候传进参数。
步骤3:vim test.i
....
void main(){
printf("Debug is open\n"); //预编译之后,发现只有这一句话。因为定义了DEBUG。
}
例2:
#include<stdio.h>
void main(){
FILE * fp;
fp=open("file","rb");
if(NULL==fp){
#ifdef DEBUG //打开调试开关之后,下面这句话就会打印。
printf("Debug is open\n");
#endif
}
}