如何在宏c ++中使用cout

时间:2012-03-09 20:00:59

标签: c++ visual-studio c-preprocessor

我有以下宏来测量头文件中的时间:

#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工作。

1 个答案:

答案 0 :(得分:3)

在您调用宏的位置必须显示名称cout。写

TIMER_START(0);

就像写作

double ___timer__0 = (double) getTickCount();;

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

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

其他一些问题:

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

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

TIMER_START(0);
TIMER_END(0);