c++ - C++ 宏什么时候有用?

标签 c++ c-preprocessor

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/

相关文章:

c - 如何在 _Pragma 的参数中连接字符串

c++ - 如何加速稀疏数组添加

c++ - 使用最小堆的堆排序算法

c++ - std::shared_ptr 在按引用传递时如何跨类层次结构转换?

c++ - Qt库——静态成员函数的线程安全

c - 为什么#define不需要分号?

c - 我可以使用什么预定义的宏来检测 clang?

c++ - 在类中分配过多动态内存时,Qt 会抛出错误

C预处理器: How to create a character literal?

c++ - 使用 Unicode 字符串文字 Stringify 宏