[英]get code line with __LINE__
我嘗試使用以下方法打印當前代碼的行號:
#include <stdio.h>
void err (char *msg)
{
printf ("%s : %d" , msg , __LINE__);
}
int main ( int argc , char **argv )
{
ERR ("fail..");
return 0;
}
但我總是得到錯誤的行號,它應該是10
而不是5
,我該如何解決這個問題呢?
我也嘗試使用一些宏:
#define ERR (msg) do { printf ("%s : %d\\n" , msg , __LINE__); } while (0)
並導致錯誤: msg not declared
__LINE__
將顯示它出現的行,它始終是第5行。
要使其工作,您需要將__LINE__
作為單獨的參數傳遞。
#include <stdio.h>
void err (char *msg, int line)
{
printf ("%s : %d" , msg , line);
}
int main ( int argc , char **argv )
{
err("fail..", __LINE__);
return 0;
}
更好的方法是將這種方法的調用定義為宏 ,如下所示:
#define PRINTERR(msg) err((msg), __LINE__)
#define ERR(msg) printf("%s : %d", (msg), __LINE__)
應該做的伎倆。
你不需要這個功能!
__LINE__
獲取當前行,表示調用它的行。 您需要將其作為參數傳遞:
ERR ("fail..", __LINE__);
否則它將始終是您的錯誤函數中的行,在您的示例中為5 。 更改函數以接受__LINE__
宏的int
類型。
我會使用@Ed Heal回答的宏。 另外,你得到“msg not declared”的原因是
宏中的變量需要括在括號中(即
因為宏的名稱和括號之間有一個空格來啟動參數列表。 (msg)
)。
您可以將ERR
宏:
#define ERR(msg) fprintf(stderr, "ERROR on line %d: %s\n", __LINE__, (msg))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.