2012-03-09 43 views
0

使用COUT我具有以下的宏,用于测量在头文件时间:如何在宏C++

#define TIMER_START(x) double ___timer__##x = (double) getTickCount(); 
#define TIMER_END(x) ___timer__##x = (getTickCount() - ___timer__##x) *1000/getTickFrequency(); cout << "t" << ##x << ": " << ___timer__##x << endl; 

的问题是,当我使用此头文件中,COUT没有定义。有没有选择这样使用它?我试过特定的命名空间,但没有运气。 ostream ::和std ::不包含cout的定义。 PS:我正在MSVS2010中工作。

+0

测量头文件中的时间?你是指在头文件中定义的一些函数的代码执行时间? – crashmstr 2012-03-09 20:08:37

+4

为什么这必须是一个马可? – 111111 2012-03-09 20:12:09

+4

您需要包含'',它定义了'cout'和'std'命名空间。 – 2012-03-09 20:14:06

回答

3

名称cout必须在您调用宏的位置可见。写

TIMER_START(0); 

就像写

double ___timer__0 = (double) getTickCount();; 

和相同的可见性规则。

我怀疑将cout更改为std::cout将解决该问题。当然,您需要在调用宏的任何源文件中包含适当的头文件。

其他一些问题:

标识符开始下划线被保留到执行。我相信C++也保留带有双下划线的标识符。您试图避免与用户定义的标识符相冲突,但您可能会与编译器定义的标识符或库定义的标识符发生冲突。这可能不会导致任何可见的问题,但您应该使用其他一些独特的前缀。

宏定义中的尾部分号是多余的;你会提供这些当你调用它们:

TIMER_START(0); 
TIMER_END(0); 
+0

谢谢,获取信息。我会做必要的调整。 – jnovacho 2012-03-09 20:30:22