2011-12-31 83 views
2

比方说,这是功能f()前的预处理定义:如何编写在C++中跳过代码行的预处理器定义?

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

,这是宏观的结果:

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

如何编写宏,以便将跳过功能,并且还插入一些代码后面的功能,以便结果将是这样的:

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

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

回答

6

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

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

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

这个特殊的例子,当然,是形成不良的,因为有功能外语句。

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

+0

+1一个不错的解决方案,但应该避免的解决方案。建议使用一流解决方案 – 2011-12-31 06:47:38

+0

+1基于类的构造函数/析构函数解决方案是一种可行的方法:您可以使用它构建复杂的事物。我们使用它来追踪方法入口和出口,甚至用于捕获生产环境中的崩溃堆栈。 – dasblinkenlight 2011-12-31 06:59:58

+0

噢,谢谢你,这真是太棒了:D,你是什么意思“创建类选项”,我将该对象(该类的)放在函数内部还是外部的beginig中?谢谢。这是如何运作的 :) – codekiddy 2011-12-31 07:52:01