宏删除c中的双引号
是否有任何宏将删除字符串中的双引号和“\0” 例如:- “你好\0”->你好 编辑:- 实际上我想得到函数地址。所以我想用FUNC宏来获取函数名,并用双引号和“\0”来帮助我获取函数地址 例如:宏删除c中的双引号,c,macros,C,Macros,是否有任何宏将删除字符串中的双引号和“\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
#define FUN_PTR fun
#define FUN_NAME "fun"
void fun(){
printf("fun add %p name %s\n",FUN_PTR,FUN_NAME);
}
避免用户定义宏。我想知道派生这些功能的其他方法:)
void fun(){
printf(“有趣的添加%p名称%s\n”,(\uuu FUNC\uuuu),\uu FUNC\uuu);
}
反过来做
#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"));
通常,如果您经常使用它,那么您需要定义一个helper函数来处理C中的弱类型系统:
void print_ptr_func(char const *s, int v);
#define PRINT_PTR(p) print_ptr_func(#p, p)
请注意,这不适用于获取当前函数的地址<代码>\uuuu FUNC\uuuu不是宏,也不是字符串文字,它没有双引号。您不能使用\uuuu FUNC\uuuu
获取函数的地址而不进行一些严重的欺骗,并且它会在一半时间内中断。例如:
#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);
}
#定义打印功能信息()打印功能信息
#包括
无效打印功能信息(字符常量*n)
{
void*p=dlsym(RTLD_默认值,n);
printf(“函数%s,地址%p\n”,n,p);
}
但是,这不会有一半的时间起作用--
dlsym
不是设计用于此目的的。反过来做
#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"));
通常,如果您经常使用它,那么您需要定义一个helper函数来处理C中的弱类型系统:
void print_ptr_func(char const *s, int v);
#define PRINT_PTR(p) print_ptr_func(#p, p)
请注意,这不适用于获取当前函数的地址<代码>\uuuu FUNC\uuuu不是宏,也不是字符串文字,它没有双引号。您不能使用\uuuu FUNC\uuuu
获取函数的地址而不进行一些严重的欺骗,并且它会在一半时间内中断。例如:
#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);
}
#定义打印功能信息()打印功能信息
#包括
无效打印功能信息(字符常量*n)
{
void*p=dlsym(RTLD_默认值,n);
printf(“函数%s,地址%p\n”,n,p);
}
但是,这在一半的时间内都不起作用--
dlsym
不是设计用于此目的的。为什么?也许有另一种方法来做你想做的…好吧,你到底想做什么?似乎如果我们对问题领域有一个更大的概念,我们可以给出一个更好的答案。为什么?也许有另一种方法来做你想做的…好吧,你到底想做什么?似乎如果我们对问题领域有一个更大的概念,我们可以给出一个更好的答案。