使用宏需要注意的地方


DDK提供了大量的宏。在使用这些宏的时候,要注意一种错误的发生,
这就是"侧效"(Side Effect)
宏一般由多行组成,如下面的形式,其中的"\"代表换行

#define PRINT(msg) KdPrint(("====================\n"));\

    KdPrint(msg);\

    KdPrint(("===================\n"));

在C语言中规定,for或者if语句块中的内容如果只是一句,
可以省略掉{}。如:

if(bRet)

{

    Foo();

}

//等价于

if(bRet)

    Foo();

但如果Foo是宏而非函数时,就会产生逻辑错误,如:

if(bRet)

    PRINIT(msg);

//等价于

    if(bRet)

        KdPrint(("====================\n"));

        KdPrint(msg);

        KdPrint(("===================\n"));

这明显和我们的想法不一致。产生这样的错误,称为"侧效"错误。
解决这个问题,有两个办法。
(1)对于if、while、for这样的语句,不省略{}。这样是最保险的做法
能完全保证不出现"侧效"错误
(2)在编写多行宏的时候,在宏的前后加上{}如:

#define PRINT(msg) {\

    KdPrint(("====================\n"));\

    KdPrint(msg);\

    KdPrint(("===================\n"));\

    }

你可能感兴趣的:(使用)