c语言如何把某个函数名转换为字符串
答案:2 悬赏:70 手机版
解决时间 2021-01-15 23:26
- 提问者网友:那叫心脏的地方装的都是你
- 2021-01-15 13:54
c语言如何把某个函数名转换为字符串
最佳答案
- 五星知识达人网友:荒野風
- 2021-01-15 14:14
根据编译环境,有如下方式:
1 部分编译器中,支持__FUNCTION__或__func__宏。该宏为编译器定义,值为被调用函数的函数名转换成的字符串。如在func()中调用__FUNCTION__,则该宏的值为"func"。
2 如果编译器不支持上述宏名,那么需要手动添加宏。可以有如下两种方式:
a. 直接定义对应字符串,如
#define FUNC_NAME "func"
字符串中的直接写明。
b. 统一函数转换。利用宏定义的#操作,可以实现标识符向字符串的转换。
#define FUNC_NAME(x) #x
这时调用FUNC_NAME(func)就等效于"func"。
1 部分编译器中,支持__FUNCTION__或__func__宏。该宏为编译器定义,值为被调用函数的函数名转换成的字符串。如在func()中调用__FUNCTION__,则该宏的值为"func"。
2 如果编译器不支持上述宏名,那么需要手动添加宏。可以有如下两种方式:
a. 直接定义对应字符串,如
#define FUNC_NAME "func"
字符串中的直接写明。
b. 统一函数转换。利用宏定义的#操作,可以实现标识符向字符串的转换。
#define FUNC_NAME(x) #x
这时调用FUNC_NAME(func)就等效于"func"。
全部回答
- 1楼网友:未来江山和你
- 2021-01-15 14:54
#include
typedef int (*Func)();
int func_1(int a);
int func_2(int a);
int func_3(int a);
int func_1(int a){
printf("Func:%s a=%d\n" , __func__,a);
return 0;
}
int func_2(int a){
printf("Func:%s a=%d\n" ,__func__,a);
return 0;
}
int func_3(int a){
printf("Func:%s a=%d\n" ,__func__,a);
return 0;
}
int main(){
int i=0;
Func f[3];
f[0] = func_1;
f[1] = func_2;
f[2] = func_3;
for(i=0;i<3;i++){
f[i](i);
}
return 0;
}
不知道是否能满足你的需求。要注意的是,__func__这个变量是C99的标准,最好在Linux下用GCC进行编译。我是用GCC进行编译,可以顺利读取函数名。
typedef int (*Func)();
int func_1(int a);
int func_2(int a);
int func_3(int a);
int func_1(int a){
printf("Func:%s a=%d\n" , __func__,a);
return 0;
}
int func_2(int a){
printf("Func:%s a=%d\n" ,__func__,a);
return 0;
}
int func_3(int a){
printf("Func:%s a=%d\n" ,__func__,a);
return 0;
}
int main(){
int i=0;
Func f[3];
f[0] = func_1;
f[1] = func_2;
f[2] = func_3;
for(i=0;i<3;i++){
f[i](i);
}
return 0;
}
不知道是否能满足你的需求。要注意的是,__func__这个变量是C99的标准,最好在Linux下用GCC进行编译。我是用GCC进行编译,可以顺利读取函数名。
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯