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)
你知道我的意思:跳过一些代码并插入多行的宏(或其他东西).
您可以将函数本身作为参数传递给宏:
#define write(...) \
std::cout << "test"; \
__VA_ARGS__ \
std::cout << "test";
write(
void f()
{
//...
})
Run Code Online (Sandbox Code Playgroud)
当然,这个特殊的例子是不正确的,因为在函数之外有陈述.
如果您真的对在函数的开头和结尾打印文本感兴趣,最好的办法是创建一个在其构造函数和析构函数中打印文本的类,并在函数的开头声明该类型的实例.