繁体   English   中英

如何在宏C ++中使用cout

[英]How to use cout in macro 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中工作。

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

TIMER_START(0);

就像写作

double ___timer__0 = (double) getTickCount();;

并且适用相同的可见性规则。

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

其他一些问题:

以下划线开头的标识符保留给实现。 我相信C ++还会保留带有嵌入式双下划线的标识符。 您试图避免与用户定义的标识符冲突,但是有可能与编译器定义的标识符或库定义的标识符冲突。 它可能不会引起任何可见的问题,但是您应该使用其他一些唯一的前缀。

宏定义中的尾部分号是多余的; 您将在调用它们时提供它们:

TIMER_START(0);
TIMER_END(0);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM