gpt4 book ai didi

c - 获取被调用函数C的行号

转载 作者:行者123 更新时间:2023-11-30 15:55:34 26 4
gpt4 key购买 nike

有没有一种方法可以获取 C 中调用函数的行号,而不需要执行如下操作?一段时间后,定义可能会变得乏味,必须使用 DP 而不是像平常一样的 { ,并且难以阅读;但将 LINE 添加为每个函数的第一个参数只是我不愿意做的事情。

    #include <stdio.h>
#include <stdlib.h>
#include <stdarg.h>
#define println(x,...) printf(x,##__VA_ARGS__);printf("\n");
/*
*I would like to be able to replace __LINE__ with the line
*each function was called on, or replace my DP define completely...
*/
#ifdef _DEBUG_
#define DP { println("%s:%d\t%s()",__FILE__,__LINE__,__FUNCTION__);
#else
#define DP {
#endif
void calledFunc()
DP
println("something something something");
}
void cFunc(int line)
{
println("%s:%d\t%s()",__FILE__,line,__FUNCTION__);
}
int main()
DP
calledFunc();
/* ...and I don't want to have to do this all the time either*/
cFunc(__LINE__);
}

最佳答案

有一个很好的替代品可以打印行文件名/编号。它称为“LocationID”或LID。

LID 是由项目范围计数器生成的数字。计数器的最新值应存储在源文件中,并像任何其他源文件一样 checkin / checkout 源控制系统。计数器的值可以被扰乱。这迫使其正确使用。你可以这样使用它:

   #ifdef _DEBUG_
#define DP(x, msg) println("%d: %s", x, msg);
#endif

并在您的来源中:

DP (3517, "Here we are.")

LID 的优点是:

  1. 它们对于源文件的修改(包括文件/函数的重命名)是稳定的。
  2. 它们很容易在来源中找到。
  3. 日志文件比文件名和函数名更加紧凑和清晰。

我用过几次,效果很好。在开发人员之间生成和分配 LID 值是一项开销,但结果却是这种努力的 10 倍值得。

关于c - 获取被调用函数C的行号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12030658/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com