使用宏的原因是什么,以及为什么 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)
谢谢你们所有人,很多人都说使用这样的代码是不好的,但是我的代码中有很多这样的部分(我没有编写,只修改),你能提出什么建议?
答案 0 :(得分:1)
我会说第一个,因为它会避免对foo
进行多次评估,而使用它的人不需要记住创建额外的变量。
不过,我个人并不喜欢那些改变执行流程的宏,程序员首先看到代码库很容易错过函数的返回点。
答案 1 :(得分:0)
选项1更易于使用,因为调用者无需担心foo()
的多次评估。选项1还使status
变量的范围尽可能小。选项2将状态变量泄漏到调用者的范围内。
根本不使用宏的选项3甚至更好!