首页 > 代码库 > 预处理的几个问题
预处理的几个问题
一:解决块注释/**/不能嵌套的问题:
我们知道行注释//可以多层嵌套和逐层取消,而块注释/**/不能嵌套或不能与//混用,否则有可能出现编译错误。通常我们在程序调试时如果要取消一大段代码,可以用条件编译#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
}
预处理的几个问题