繁体   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