2017-05-25 60 views
3

我在Windows環境中的C++項目之一中看過這段代碼。只是想知道%12.10lg是什麼意思。任何人有想法?%12.10lg在C++字符串格式化中意味着什麼

class Point 
{ 
double x, y; 
public Point::Point(double x_cord, double y_cord) 
{ 
    x = x_cord; 
    y = y_cord; 
} 
} 

void foo(){ 
    Point ptStart(12.5, 33.5678) 
    TRACE("%12.10lg, %12.10lg, %12.10lg\n", ptStart) 
} 
+0

可能是字符串替換的項目擴展。你應該看看(看看)TRACE宏的來源。 –

+1

這看起來像一個非常標準的printf樣式格式字符串。 %告訴它做一個變量替換。 「lg」有點奇怪,但'g'表示變量是double(就是這樣),l前綴可能是指定long的平臺方式。 「12.10」表示在小數點前顯示最多12位數字,之後最多顯示10位數字。 –

+1

@Chris,是的,'lg'使它成爲一個'長雙',按照MSDN上的[Size Specification](https://msdn.microsoft.com/en-us/library/tcxf1dw6.aspx)。顯然它實際上沒有什麼區別,內部表示是相同的。 –

回答

2

要在調試器輸出窗口中顯示從程序的消息,您可以使用ATLTRACE宏或MFC TRACE宏。與斷言類似,跟蹤宏只在程序的Debug版本中處於活動狀態,並在Release版本中編譯時消失。和printf類似,TRACE宏可以處理一些參數。

https://msdn.microsoft.com/en-us/library/4wyz8787(v=vs.80).aspx

你的具體情況,"%12.10lg"是類似於你在printf看到的字符串。

的printf採用以下格式: %[flags][width][.precision][length]specifier 你的情況:

flags = unused 
width = 12 
precision = 10 
length=long int 
specifier=short representation 

當您打印本,它會打印以下參數(ptStart)

+0

謝謝你的好解釋。那麼這種情況下的輸出是什麼?我在想爲什麼同一個字符串三次,並且ptStart如何轉換以獲得輸出? –

+0

@Nayana,我懷疑這是你正在查看的代碼中的一個錯誤。說明符的數量應該與參數的數量相匹配。 (在這種情況下,傳遞結構可能與傳遞結構的元素是等價的,但我不確定,但即使如此,在格式字符串中只能有兩個說明符,而不是三個。) –

4

TRACE可能使用正常的格式說明其那麼意味着%12.10lg應該打印出一個double值,其最小寬度爲12,精度爲10,如下所示:15.8930000000

+0

Gill:任何想法這種情況下的輸出是什麼? –