gpt4 book ai didi

c++ - 以某种方式告诉编译器 "Do not process line of code"

转载 作者:搜寻专家 更新时间:2023-10-30 23:51:54 24 4
gpt4 key购买 nike

我正在尝试创建一个用于调试日志记录的宏。这是一个额外的简化版本:

#if defined _DEBUG
#define LOG std::cout
#else
#define LOG IGNORETHISLINEOFCODE
#endif

/* ... */

LOG << "Here's some debug code";

我一直在想如何告诉编译器忽略这行以“LOG”开头的代码。我个人并没有寻找替代方法,例如 #define LOG( ... ) (void)0。这是我尝试过的:

  • 将 void 的左移运算符重载为不执行任何操作的内联 constexpr(这仍然会导致它在反汇编中可见;我不希望这样)

  • 定义 LOG 为:#define LOG//,但注释标识符没有被替换

有什么想法吗?就像我之前说的,我不想要任何替代方案,例如用 #if defined _DEBUG

包围所有日志代码

最佳答案

如果你的 C++ 版本处理 if constexpr 我已经开始喜欢你所要求的沿着这条线的东西。

#include <iostream>

template <bool Log>
struct LOGGER {
template <typename T>
LOGGER& operator<<(T const &t) {
if constexpr (Log)
std::cout << t;
return *this;
}
};

LOGGER<false> LOG;

int main (int argc, char const* argv[])
{
LOG << "A log statement." << '\n';
return 0;
}

关于c++ - 以某种方式告诉编译器 "Do not process line of code",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52693279/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com