如何编写在C++中跳过代码行的预处理器定义?

cod*_*ddy 2 c++ macros c-preprocessor

假设这是函数之前的预处理器定义f():

#define write std::cout << "test";
write
void f()
{
    //...
}
Run Code Online (Sandbox Code Playgroud)

这是该宏的结果:

std::cout << "test"
void f()
{
    //...
}
Run Code Online (Sandbox Code Playgroud)

如何编写该宏以便它将跳过函数并在函数后面插入一些代码,以便结果如下所示:

std::cout << "test";
void f()
{
    //...
}
std::cout << "test";
Run Code Online (Sandbox Code Playgroud)

你知道我的意思:跳过一些代码并插入多行的宏(或其他东西).

Jam*_*lis 6

您可以将函数本身作为参数传递给宏:

#define write(...)       \
    std::cout << "test"; \
    __VA_ARGS__          \
    std::cout << "test";

write(
void f()
{
    //...
})
Run Code Online (Sandbox Code Playgroud)

当然,这个特殊的例子是不正确的,因为在函数之外有陈述.

如果您真的对在函数的开头和结尾打印文本感兴趣,最好的办法是创建一个在其构造函数和析构函数中打印文本的类,并在函数的开头声明该类型的实例.