条件编译

无值宏定义

定义宏的时候不指定一个值得时候就被称为无值宏定义,一般无值宏会使用在条件编译当中:

#define __MAIN_H__ 
#define __TYPE_H__

注意
对于无值宏来说我们只能判断它是否被定义,而无法判断他的值

保护宏

 在一个工程中,为了防止某个头文件被多次包含,就会使用保护宏,防止预处理时被多次展开,造成重定义的错误。

#ifndef __MAIN_H__ 
#define __MAIN_H__    
    ......用户代码.......
#endif 

注意:
保护宏必须加在最前面,最后用#endif结尾。

条件编译

 通过条件来判断某一段代码是否需要编译。

#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 

条件编译的使用场景

 可以在编译程序的时候在编译命令后面增加一个宏的定义。

gcc demo.c -o demo -DDEBUG 

注意:
在以上并以命令中 加上 -D 意味着定义一个 #define DEBUG 宏,
通过编译语句来定义某个宏,来决定代码当中某一部分代码块是否需要编译。

posted @ 2020-12-06 22:02  ding-ding-light  阅读(133)  评论(0编辑  收藏  举报