无值宏定义
定义宏的时候不指定一个值得时候就被称为无值宏定义,一般无值宏会使用在条件编译当中:
#define __MAIN_H__
#define __TYPE_H__
注意
对于无值宏来说我们只能判断它是否被定义,而无法判断他的值
保护宏
在一个工程中,为了防止某个头文件被多次包含,就会使用保护宏,防止预处理时被多次展开,造成重定义的错误。
#ifndef __MAIN_H__
#define __MAIN_H__
......用户代码.......
#endif
注意:
保护宏必须加在最前面,最后用#endif结尾。
条件编译
通过条件来判断某一段代码是否需要编译。
#ifdef DEBUG // 如果宏定义条件成立,则这段代码需要编译,否则就不需要
printf("%d__%s__%s
", __LINE__ , __FUNCTION__, __FILE__); printf("%d__%s__%s
", __LINE__ , __FUNCTION__, __FILE__);
#endif
#ifndef DEBUG // 如果宏没有定义条件成立,则这段代码需要编译
printf("%d__%s__%s
", __LINE__ , __FUNCTION__, __FILE__);
#else // 如果宏有定义则将编译这一条
printf("%d__%s__%s
", __LINE__ , __FUNCTION__, __FILE__);
#endif
条件编译的使用场景
可以在编译程序的时候在编译命令后面增加一个宏的定义。
gcc demo.c -o demo -DDEBUG
注意:
在以上并以命令中 加上 -D 意味着定义一个 #define DEBUG 宏,
通过编译语句来定义某个宏,来决定代码当中某一部分代码块是否需要编译。