【问题标题】:Get the mother function __FILE__ [duplicate]获取母函数__FILE__ [重复]
【发布时间】:2017-07-14 08:15:42
【问题描述】:

我想要的是这样的:

./client.out:functionC.c:78: Error blabla

./client.out:client.c:98: 错误 blabla

这是我的示例函数

/* client.c */
int main(int argc, char *argv[]) {
    
    if(functionCalled() == -1){
        fprintf(stderr, "%s:%s:%d: Error blabla\n", argv[0], __FILE__, __LINE__);
    }
    return 0;
} 

/* functionC.c */
int functionCalled(){
    fprintf(stderr, "%s:%s:%d: Error blabla\n", ?????, __FILE__, __LINE__);
    return -1;
}

显然我无法通过参数发送main.c 名称。你认为有可能得到调用该函数的母程序吗?我有一个客户端和一个服务器调用相同的函数,但如果出现错误,我需要知道哪个程序(客户端或服务器)崩溃了。

回答:

在functionC.c中使用:extern char *progName;,在client.c中使用char *progName;

【问题讨论】:

  • 我不想得到导致问题的函数,但是mainProgram.out:program.c:line
  • 为什么你不能将 argv[0] 传递给你的函数?它和其他变量一样是一个变量
  • @Jean-FrançoisFabre 我试过你的 PRETTY_FUNCTION 和你给出的答案,但它没有返回我需要的东西。我编辑了我的帖子,你会明白的
  • @ChrisTurner 因为在我的应用程序中我无法通过函数输入我想要的内容
  • 不确定我是否理解正确,但如果您想显示命令名称,只需创建静态/全局变量并在 main.xml 中初始化它。类似char* progName = NULL; int main(...) { progName=argv[0]; ...}

标签: c


【解决方案1】:

是的,您可以在 main.c 文件中执行此操作:

static const char *executable = NULL;

const char *get_main_file()
{
    return executable == NULL ? "????" : executable;
}

主要是:

int main(...)
{
    executable = argv[0];
    ...

并从您的其他文件中调用get_main_file()。这样,argv[0] 值就会被导出到任何地方(也许您想对其进行外观更改,重新修改它以删除完整路径,这可以通过将最后一个路径分隔符的偏移量添加到 executable 来轻松完成(如果找到) ,就像basename 一样)

【讨论】:

    猜你喜欢
    • 2012-07-30
    • 1970-01-01
    • 2014-02-26
    • 1970-01-01
    • 2023-03-18
    • 1970-01-01
    • 2017-10-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多