2012-03-09 58 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