假设这是函数f()
之前的预处理器定义:
#define write std::cout << "test";
write
void f()
{
//...
}
这是该宏的结果:
std::cout << "test"
void f()
{
//...
}
如何编写该宏以使其跳过函数并在函数后面插入一些代码,以便结果如下:
std::cout << "test";
void f()
{
//...
}
std::cout << "test";
你知道我的意思:跳过一些代码并插入多行的宏(或其他东西)。
答案 0 :(得分:6)
您可以将函数本身作为参数传递给宏:
#define write(...) \
std::cout << "test"; \
__VA_ARGS__ \
std::cout << "test";
write(
void f()
{
//...
})
当然,这个特殊的例子是不正确的,因为在函数之外有陈述。
如果您真的对在函数的开头和结尾打印文本感兴趣,最好的办法是创建一个在其构造函数和析构函数中打印文本的类,并在该函数的开头声明该类型的实例。功能