C 预处理器有理由被 C++ 社区恐惧和回避。内联函数、常量和模板通常是 #define
的更安全和优越的替代品。
以下宏:
#define SUCCEEDED(hr) ((HRESULT)(hr) >= 0)
绝不优于安全类型:
inline bool succeeded(int hr) { return hr >= 0; }
但是宏确实有它们的位置,请列出您发现的宏的用途,如果没有预处理器 就无法 做到。
请将每个用例放在一个单独的答案中,以便对其进行投票,并且如果您知道如何在没有预处理者的情况下获得其中一个答案,请在该答案的评论中指出如何。
原文由 Motti 发布,翻译遵循 CC BY-SA 4.0 许可协议
作为调试功能的包装器,自动传递
__FILE__
、__LINE__
等内容:由于 C++20 魔法类型
std::source_location
可以用来代替__LINE__
和__FILE__
来实现一个模拟作为普通函数(模板)。