C 预处理器受到 C++ 社区的恐惧和回避是有道理的。内联函数、常量和模板通常比 #define
更安全、更优越。
以下宏:
#define SUCCEEDED(hr) ((HRESULT)(hr) >= 0)
绝不优于安全类型:
inline bool succeeded(int hr) { return hr >= 0; }
但是宏确实有它们的位置,请列出您发现的宏的用途,而您不能没有预处理器。
请将每个用例放在单独的答案中,以便对其进行投票,如果您知道如何在没有预审员的情况下获得其中一个答案,请在该答案的评论中指出如何。
最佳答案
作为调试函数的包装器,自动传递 __FILE__
、__LINE__
等内容:
#ifdef ( DEBUG )
#define M_DebugLog( msg ) std::cout << __FILE__ << ":" << __LINE__ << ": " << msg
#else
#define M_DebugLog( msg )
#endif
自 C++20 起魔术类型 std::source_location
然而,可以使用代替 __LINE__
和 __FILE__
来将模拟实现为普通函数(模板)。
关于c++ - C++ 宏什么时候有用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/96196/