2011-05-06 111 views
0
15 ERROR_MACRO("Error is in %s on line %d\n", 
16    __FILE__, __LINE__); 

我得到以下輸出正確的行爲:這是__LINE__

錯誤是tmp.c第16行

我收到相同的輸出,即使我用以上形式的線如下:

15 ERROR_MACRO("Error is in %s on line %d\n", \ 
16    __FILE__, __LINE__); 

我不應該得到「第15行」而不是「第16行」嗎?

我該怎麼做才能得到「第15行」?

回答

2

__LINE__始終展開爲其出現的確切行號。編譯器如何報告跨越多行的代碼的錯誤,但大多數編譯器都是按照語句開始的路線行事(因爲大多數錯誤不能侷限於單個字符)。

沒有宏可以確定當前語句出現在哪一行,因爲預處理通常發生在編譯器甚至開始思考語句之前。

+0

+良好的抓住,由於格式不好我沒有趕上換行符! – 2011-05-06 06:12:33

0

將ERROR_MACRO移動到代碼中的第15行? __LINE__是當前文件中的行號。沒有(法律)的方式來改變它,除非你移動你的代碼...

0

如果你堅持要上線使用__LINE__繼電話,然後就去做:

ERROR_MACRO("Err in %s on line %d\n", 
       __FILE__, __LINE__ - 1); 

更好的是,爲什麼你不只是定義一個宏宏:

#define MY_ERR ERROR_MACRO("Err in %s on line %d", __FILE__, __LINE__) 

現在你只需撥打一個短MY_ERR;而不必擔心線長度的限制(這就是爲什麼你這樣做,我假設)。