GNU C语言的 扩展(五) __FUNCTION__ 预定义标志符
来源:互联网 发布:自然堂 淘宝销售额 编辑:程序博客网 时间:2024/05/21 18:40
GNU CC 预定义了两个标志符保存当前函数的名字,__FUNCTION__ 保存函数在源码中的名字,__PRETTY_FUNCTION__ 保存带语言特色的名字。在 C 函数中,这两个名字是相同的,在 C++ 函数中,__PRETTY_FUNCTION__ 包括函数返回类型等额外信息,Linux 内核只使用了 __FUNCTION__。
通常,在调式中最让人烦恼的阶段是不断地检查是否已调用了特定的函数。对此问题,一个解决办法是,在函数里添加 printf() <针对 C 语言>,如:
但是,通常在一个典型的工程中,会包含有数千个函数,如果在每个函数中都加入一条这样的语句,那将非常痛苦。所以,现在有一种机制,可以自动玩成这项工作: __FUNCTION__
在最新的 ISO C 标准中,如 C99,加入了另一个有用的,类似于宏的表达式 __func__ ,它会报告未修饰过的(也就是未裁减过的)、正在被访问的函数名。注意,__func__ 不是一个宏,因为预处理器对此函数一无所知;相反,它是作为一个隐式声明的常量字符数组实现的:
staticconst char__func__[] = "functon-name";在 function-name 处,为实际的函数名。
测试代码:
运行及输出:
说明:
__func__ 标识符为官方 C99 标准定义,但是 ISO C++ 却不完全支持所有的 C99 扩展。因此,大多数编译器提供商都使用 __FUNCTION__ 取而代之。__FUNCTION__ 通常是一个定义为 __func__ 的宏,之所以使用这个名字,是因为它已经得到了广泛的支持。
通常,在调式中最让人烦恼的阶段是不断地检查是否已调用了特定的函数。对此问题,一个解决办法是,在函数里添加 printf() <针对 C 语言>,如:
引用voidfunc_test ()
{
printf(" func_test() ");
/* 其他代码 */
}
但是,通常在一个典型的工程中,会包含有数千个函数,如果在每个函数中都加入一条这样的语句,那将非常痛苦。所以,现在有一种机制,可以自动玩成这项工作: __FUNCTION__
在最新的 ISO C 标准中,如 C99,加入了另一个有用的,类似于宏的表达式 __func__ ,它会报告未修饰过的(也就是未裁减过的)、正在被访问的函数名。注意,__func__ 不是一个宏,因为预处理器对此函数一无所知;相反,它是作为一个隐式声明的常量字符数组实现的:
staticconst char__func__[] = "functon-name";在 function-name 处,为实际的函数名。
测试代码:
引用#include <stdio.h>
void show_name (const char *name)
{
printf("%s\n",name);
}
void fun_test ()
{
show_name (__FUNCTION__);
printf ("\n");
}
void fun_test2 ()
{
printf (__func__);
printf ("\n");
}
int main()
{
fun_test();
fun_test2();
return 0;
}
运行及输出:
引用beyes@linux-beyes:~/C/GNU_C_EXT> ./FUNCTION.exe
fun_test
fun_test2
说明:
__func__ 标识符为官方 C99 标准定义,但是 ISO C++ 却不完全支持所有的 C99 扩展。因此,大多数编译器提供商都使用 __FUNCTION__ 取而代之。__FUNCTION__ 通常是一个定义为 __func__ 的宏,之所以使用这个名字,是因为它已经得到了广泛的支持。
0 0
- GNU C语言的 扩展(五) __FUNCTION__ 预定义标志符
- C语言中预定义符 __FILE__, __LINE__, __FUNCTION__, __DATE__, __TIME__ 的使用演示
- C语言中预定义符 __FILE__, __LINE__, __FUNCTION__, __DATE__, __TIME__ 的使用
- C语言中预定义符 __FILE__, __LINE__, __FUNCTION__, __DATE__, __TIME__
- GNU C语言的 扩展(一)语句表达式
- GNU C语言的 扩展(六)内建函数
- GNU C语言的 扩展(七)__attribute__测试
- GNU C的扩展
- GNU C的扩展
- GNU C的扩展
- GNU C的扩展
- 使用Unicode版的预定义宏__FUNCTION__
- C++零食:使用Unicode版的预定义宏__FUNCTION__
- 关键字: C/C++,预定义宏,__FILE__, __LINE__, __DATE__,__TIME__,__func__,__FUNCTION__ __FILE__:当前源代码文件名的字符串文
- 2.2.2 GNU C对标准C语言的扩展
- GNU对C语言的扩展---结构体
- C语言编译器的预定义符号
- C语言编译器的预定义符号
- 9种算法思想
- 从一本书说起,创业失败常常是因为创业者忘了“自我更新”
- 问过任务和
- 跟我一起makefile学习笔记
- 关于android开发中涉及到的java知识:面向对象(二)
- GNU C语言的 扩展(五) __FUNCTION__ 预定义标志符
- 云和端之间从未如此流畅地结合
- Qt mvc四
- 值栈
- BerkeleyDB java的简单使用
- JAVA模拟银行
- ASIHTTPRequest使用
- json省市级联
- GNU C语言的 扩展(六)内建函数