你好 编辑:-其实我想得到函数地址。所以我想使用 FUNC 宏来获取函数名称并去掉双引号和 '\0' 将帮助我获取函数地址。-6ren">
gpt4 book ai didi

c - 删除c中双引号的宏

转载 作者:太空宇宙 更新时间:2023-11-04 06:41:31 53 4
gpt4 key购买 nike

是否有任何宏可以删除字符串中的双引号和'\0'?

例如:-"你好\0"-> 你好

编辑:-其实我想得到函数地址。所以我想使用 FUNC 宏来获取函数名称并去掉双引号和 '\0' 将帮助我获取函数地址。

例如:

#define FUN_PTR fun
#define FUN_NAME "fun"
void fun(){
printf("fun add %p name %s\n",FUN_PTR,FUN_NAME);
}

避免用户定义宏。我想知道派生这些功能的其他方法 :)。

void fun(){
printf("fun add %p name %s\n",<SOME_MACRO>(__FUNC__),__FUNC__);
}

最佳答案

反过来做。

#define PRINT_PTR(p) printf(#p " == %p\n", (void *) p)

int main()
{
PRINT_PTR(exit);
return 0;
}

在宏内部,如果x 是宏参数,则#x 是字符串版本。

#define PRINT_INT(i) printf(#i " == %d\n", i)
PRINT_INT(5 + ~3);
PRINT_INT(atoi("1234"));

通常,如果你经常使用它,那么你会想要定义一个辅助函数来解决 C 中的弱类型系统:

void print_ptr_func(char const *s, int v);
#define PRINT_PTR(p) print_ptr_func(#p, p)

请注意,这不适用于获取当前函数的地址。 __FUNC__ 不是宏,也不是字符串文字,它没有双引号。你不能使用 __FUNC__ 来获得函数的地址,除非有一些严重的技巧,而且它会在一半的时候中断。例如:

#define PRINT_FUNC_INFO() print_func_info(__FUNC__)

#include <dlfcn.h>
void print_func_info(char const *n)
{
void *p = dlsym(RTLD_DEFAULT, n);
printf("Function %s, address %p\n", n, p);
}

但是,这不会在一半时间起作用——dlsym 并非设计用于该目的。

关于c - 删除c中双引号的宏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7473534/

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