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