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

标签 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";

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

最佳答案

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

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

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

当然,这个特定示例的格式不正确,因为在函数之外还有语句。

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

关于c++ - 如何编写跳过 C++ 代码行的预处理器定义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8686797/

相关文章:

doxygen - 如何显示定义的值

c++ - 设置标准流使用的内部缓冲区 (pubsetbuf)

javascript - JavaScript 中的 Lisp 宏引用实现

c++ - 如何避免坏的 FD_SET 缓冲区溢出崩溃?

macros - 匹配封闭函数的返回类型

c - 为什么我需要在此定义中将 x 和 y 添加括号?

c++ - boost::asio io_service 保留我的其余代码运行

c++ - 如何强制 MIDL 编译器在 Visual Studio 2010 中使用 "C++ mode"而不是 "C mode"?

c++ - 如何避免重复发送消息

c - 如何理解定义宏中的运算符 "\"?