我有以下宏来测量头文件中的时间:
#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 :(得分:3)
在您调用宏的位置必须显示名称cout
。写
TIMER_START(0);
就像写作
double ___timer__0 = (double) getTickCount();;
并且适用相同的可见性规则。
我怀疑将cout
更改为std::cout
可以解决问题。当然,您需要在调用宏的任何源文件中包含适当的标头。
其他一些问题:
以下划线开头的标识符保留给实现。我相信C ++还保留带有嵌入式双下划线的标识符。您试图避免与用户定义的标识符冲突,但您可能会遇到与编译器定义或库定义的标识符冲突的风险。它可能不会导致任何明显的问题,但你应该使用其他一些独特的前缀。
宏定义中的尾随分号是多余的;当你调用它们时,你会提供这些:
TIMER_START(0);
TIMER_END(0);