预处理的几个问题

一:解决块注释/**/不能嵌套的问题:

    我们知道行注释//可以多层嵌套和逐层取消,而块注释/**/不能嵌套或不能与//混用,否则有可能出现编译错误。通常我们在程序调试时如果要取消一大段代码,可以用条件编译#if 0  #endif实现

二:避免头文件的重复包含:

     假如a.h中自定义了一个结构体,在b.h和c.h中都又自定义了一个结构体(其成员有a.h的结构体内容,所以b.h和c.h都包含了a.h),而在.c中又用到了b.h和c.h的结构体(所以包含了b.h和c.h),此时因为多次包含了a.h所以编译器会报错,此时只要在a.h中使用#ifndef _debug__  #define _debug__ ....#endif.

三 宏的嵌套包含:

 #define AA 1

 #define BB 1

void main(void)

{

    #ifdef AA

        ……

          #if BB   //嵌套的宏,这里不能再用#ifdef,

              ……   //否则BB是0也会执行这些代码,

          #else   //而这#else不会被执行

              ……

          #endif

    #else

        ……

    #endif

}

或者这样也行

#define AA   //使用宏定义做控制开关,此时#ifdef可嵌套

#define BB   //使用宏定义做控制开关,要关闭时,直接注释掉

int main()

{

    #ifdef AA

        ……

        #ifdef BB   //嵌套的宏,如果定义了,则执行

            ……       

        #else  

            ……

        #endif

    #else

        ……

    #endif

}

posted on 2017-05-12 18:50  杰瑞鼠  阅读(134)  评论(0编辑  收藏  举报