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

时间:2011-12-31 06:40:14

标签: c++ macros c-preprocessor

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

#define write std::cout << "test";
write
void f()
{
    //...
}

这是该宏的结果:

std::cout << "test"
void f()
{
    //...
}

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

std::cout << "test";
void f()
{
    //...
}
std::cout << "test";

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

1 个答案:

答案 0 :(得分:6)

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

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

write(
void f()
{
    //...
})

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

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