簡體   English   中英

使用__LINE__獲取代碼行

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM