[英]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.