C++ C++;重复行的ifdef

C++ C++;重复行的ifdef,c++,macros,comments,c-preprocessor,C++,Macros,Comments,C Preprocessor,我有许多printfs,我想对它们进行注释,并能够以灵活的方式再次取消注释。我在考虑这样的解决方案: #define SOMETHING ... #ifdef SOMETHING printf(.... #endif 但一个弱点是,我必须为每一个printf都这样做。 第一个问题,有人知道更有效的方法吗?如果是这样,请给出一些代码片段作为示例,因为对于预处理器和宏定义,我是初学者 第二个问题,我可以对couts执行同样的操作吗?如果不可以,它们的解决方案是什么?您可以通过一个简单的宏来完成此

我有许多printfs,我想对它们进行注释,并能够以灵活的方式再次取消注释。我在考虑这样的解决方案:

#define SOMETHING
...

#ifdef SOMETHING
printf(....
#endif
但一个弱点是,我必须为每一个printf都这样做。 第一个问题,有人知道更有效的方法吗?如果是这样,请给出一些代码片段作为示例,因为对于预处理器和宏定义,我是初学者


第二个问题,我可以对couts执行同样的操作吗?如果不可以,它们的解决方案是什么?

您可以通过一个简单的宏来完成此操作,该宏允许您完全删除
printf
语句

#ifdef PRINT_DATA
#define PRINT(x) printf x
#else
#define PRINT(x)
#endif


void test()
{
    PRINT(("Entering test\n"));
}

有选择地记录东西是许多人面临的问题;代替滚动你自己的解决方案,并随着你的需求的变化而慢慢地扩展它,考虑使用现有的实现,比如它有很多你现在可能不需要的特性,但将来可能需要。

<关于CUT的问题,我使用的是:

#define verbose
//or
bool verbose = true;

//Verbose Output
#define VOUT(str) do { if (verbose) { std::cout << str; } } while (0,0)

除此之外,由于您询问的是
std::cout
:是的,这是可能的,但是,因为您会使用
,非常感谢,如果我想执行printf(“某物%I”,c)或具有更多值?我收到警告C4002:macroPay的实际参数太多,请密切注意括号…要像您要求的那样打印现有值,请执行以下操作
print((“某物%I”,c))'
int i = 5;
VOUT("Hello world " << i << '\n');
//'Hello world 5
//'
#ifdef PRINT_DATA
#define OUT std::cout 
#else
#include <iosfwd> 
struct nullstream_t{};

template <typename T>
nullstream_t & operator<<(nullstream_t & s, T const &){return s;}
nullstream_t & operator<<(nullstream_t & s, std::ostream &(std::ostream&)){
    return s;
}

static nullstream_t nullstream;

#define OUT nullstream
#endif

#include <iostream>

int main(){
    OUT << "Hello World" << std::endl;
}