c中良好的宏观实践

时间:2011-09-24 13:26:42

标签: c macros

使用宏的原因是什么,以及为什么 1)

CHECK(foo());
#define CHECK(foo) do{                            \
                           UCHAR status = foo;    \
                           if(0 != status)        \
                              // do some stuff    \
                              return status;      \
                        }while(0)

或 2)

UCHAR status = foo();
CHECK(status);

#define CHECK(status) do{                            \
                           if(0 != status)        \
                              // do some stuff    \
                              return status;      \
                        }while(0)

编辑

谢谢你们所有人,很多人都说使用这样的代码是不好的,但是我的代码中有很多这样的部分(我没有编写,只修改),你能提出什么建议?

2 个答案:

答案 0 :(得分:1)

我会说第一个,因为它会避免对foo进行多次评估,而使用它的人不需要记住创建额外的变量。

不过,我个人并不喜欢那些改变执行流程的宏,程序员首先看到代码库很容易错过函数的返回点。

答案 1 :(得分:0)

选项1更易于使用,因为调用者无需担心foo()的多次评估。选项1还使status变量的范围尽可能小。选项2将状态变量泄漏到调用者的范围内。

根本不使用宏的选项3甚至更好!