在许多C/C++宏中,我看到宏的代码包含在看似无意义的do while循环中.这是一些例子.
#define FOO(X) do { f(X); g(X); } while (0)
#define FOO(X) if (1) { f(X); g(X); } else
Run Code Online (Sandbox Code Playgroud)
我看不出它do while在做什么.为什么不在没有它的情况下写这个?
#define FOO(X) f(X); g(X)
Run Code Online (Sandbox Code Playgroud) 该ç预处理器有理由担心和C++社区避之唯恐不及.内联功能,功能和模板通常是更安全和更好的替代品#define.
以下宏:
#define SUCCEEDED(hr) ((HRESULT)(hr) >= 0)
Run Code Online (Sandbox Code Playgroud)
绝不是优于安全类型:
inline bool succeeded(int hr) { return hr >= 0; }
Run Code Online (Sandbox Code Playgroud)
但宏确实有它们的位置,请列出您为宏找到的用途,如果没有预处理器,您就无法做到.
请将每个用例放在一个单独的答案中,以便可以进行投票,如果您知道如何在没有预备教授的情况下实现其中一个答案,请指出该答案的评论.
我总是看到使用宏比使用函数更好的示例和情况.
有人可以通过一个例子向我解释宏与功能相比的缺点吗?