是否可以用#Define替换整行

Is it possible to replace the whole line with #define?

本文关键字:替换 #Define 是否      更新时间:2023-10-16

让我们假设我有一个带有许多文件和许多 cout s的程序,并且出于调试目的,我想暂时禁用输出,但仅在一个文件中禁用。p> 这只是好奇的问题,我知道我不应该这样做是为了禁用输出,但是我开始怀疑何时遇到这个问题,而且只显示了我的意思。

我尝试创建一个#define宏,但是我不能替换整行,只有一个符号(带有参数)。

例如:

//some common header file
#ifdef DISABLE_OUTPUT
#define cout... void; //?? DK exactly what should i put here
#endif

//other file
#include "commons.h" //my macro
#define DISABLE_OUTPUT
void foo()
{
    ...
    cout << "blablabla" << 4 << "something" << endl; // should be removed
    ...
}

如果定义了DISABLE_OUTPUT,则应用void;替换整个行(更好清除行)。

问题是我不知道如何用#define清除整个线。

我可以使用任何"魔术"符号或技巧?

以与标准库组件相同的名称定义宏是一个坏主意,因此您根本不应该#define cout。我将假设您#define disableable_cout

最简单的答案是这样定义它:

#ifdef DISABLE_OUTPUT
#define disableable_cout if (false) cout
#else
#define disableable_cout cout
#endif

然后将foo中的cout行更新到以下:

disableable_cout << "blablabla" << 4 << "something" << endl;

将扩展到这两个:

if (false) cout << "blablabla" << 4 << "something" << endl;

如果定义了DISABLE_OUTPUT,或者为此:

cout << "blablabla" << 4 << "something" << endl;

如果未定义DISABLE_OUTPUT

然后,如果定义了DISABLE_OUTPUT,则跳过输出线;如果没有,它将发生。

或者,您可能总是需要定义DISABLE_OUTPUT,为0(不要禁用)或1(请禁用)。然后,您可以使用单个定义,例如:

#define disableable_cout if (!DISABLE_OUTPUT) cout

请注意,任何一种选项都像大多数宏一样脆弱,但是在典型的情况下应该有效。