相关疑难解决方法(0)

获取C(gcc)中当前函数的指针?

gcc中有一个魔术变量,它持有一个指向当前函数的指针吗?

我想有一种表包含每个函数指针的一组信息.

我知道有一个__func__变量包含当前函数的名称作为字符串但不作为函数指针.

这不是为了调用函数而是仅仅用作索引.

编辑 基本上我想做的是能够在执行当前函数之前运行嵌套函数(并且还捕获返回以执行某些操作.)基本上,这就像__cyg_profile_func_enter和__cyg_profile_func_exit(检测函数).但问题是这些仪器功能是全局的而不是功能专用的.

编辑 在Linux内核中,你可以使用unsigned long kallsyms_lookup_name(const char *name)include/linux/kallsyms.h...请注意CONFIG_KALLSYMS选项必须被激活.

c gcc function-pointers

12
推荐指数
2
解决办法
1万
查看次数

如何在函数声明中用省略号获取C中的调用函数名?

我试图在函数中知道它的来电者姓名.

如果您查看以下链接,它不会重复,因为我添加了一个区别:函数声明中的省略号用法.

我试过这个,从这个解决方案开始我们怎么知道调用者函数的名字?要做到这一点,但我无法得到解决方案.

这对我有用:

void a(int deb, char *str)
{
    printf("%s\n", str);
}

void a_special(int deb, char const * caller_name, char *str)
{
    printf( "[%d] blablabla [%s] ", deb, caller_name);
    a(deb, str);
}

#define a(deb, str) a_special(deb, __func__, str)

int main()
{
    a(1, "my log");
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

但是当我添加省略号(我说:"......")时,我不知道如何用宏定义来实现它.可以在标准-C?

void a(int deb, char *str, ...) 
{
    va_list args;
    va_start(args,str);
    vprintf(str,args);
    va_end(args);
}

void a_special(int deb, char const * caller_name, char *str, ...) 
{
    printf( …
Run Code Online (Sandbox Code Playgroud)

c

7
推荐指数
1
解决办法
114
查看次数

如何找到父函数的__FUNCTION __,_ _ _ 3和__FILE__?

我只是愚弄自己:我想跟踪一个进程的执行,为了做到这一点,我编写了一个函数trace(),其中包含以下代码行:

printf("%s[%s:%d], %s\n", __FUNCTION__, __FILE__, __LINE__, s_message);
Run Code Online (Sandbox Code Playgroud)

我希望看到我在哪个函数,该文件中的文件和行,但我只是看到了我编写'trace()'函数的文件的信息.

是否有可能,是否有一些trace()左右,告诉C编译器从调用函数的父代中获取所提到的宏?

c

5
推荐指数
1
解决办法
2747
查看次数

呼叫者功能的打印名称

我发现__FUNCTION__宏将给出当前正在执行的函数的名称,但是有没有可用的宏来打印父函数的名称(调用当前正在运行的函数的函数)?

void print_error_message(const char *msg)
{
    printf("%s : %s\n",__FUNCTION__,msg);
}

int main()
{
    print_error_message("failed to connect");
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

上面的程序将给出输出:

print_error_message : failed to connect
Run Code Online (Sandbox Code Playgroud)

但是我真正需要的是

main : failed to connect
Run Code Online (Sandbox Code Playgroud)

因为main()被调用 print_error_message()

我不想将另一个参数传递给print_error_message()像这样的函数print_error_message(__FUNCTION__, msg),我期望的是类似的宏或函数来检索调用方函数的名称。

c linux macros c89

2
推荐指数
1
解决办法
88
查看次数

标签 统计

c ×4

c89 ×1

function-pointers ×1

gcc ×1

linux ×1

macros ×1