__FUNCTION__,__FILE__,__LINE__在C/C++编程中,这3个变量分别为当前函数名(char *),当前文件(char *),当前行号(int).

作为一个C++程序员,可能经常遇到 __TIME__、__FILE__、__DATE__ 这样的宏,它们会在编译时,分别转换为包含编译时间、处理的转换单元名称及当前时间的字符串。

  在最新的ISO C标准中,如大家所知的C99,加入了另一个有用的、类似宏的表达式__func__,其会报告未修饰过的(也就是未裁剪过的)、正在被访问的函数名。请注意,__func__不是一个宏,因为预处理器对此函数一无所知;相反,它是作为一个隐式声明的常量字符数组实现的:
static const char __func__[] = "function-name";
  在function-name处,为实际的函数名。为激活此特性,某些编译器需要使用特定的编译标志,请查看相应的编译器文档,以获取具体的资料。

官方C99标准为此目的定义的__func__标识符,确实值得大家关注,然而,ISO C++却不完全支持所有的C99扩展,因此,大多数的编译器提供商都使用 __FUNCTION__ 取而代之,而 __FUNCTION__ 通常是一个定义为 __func__ 的宏,之所以使用这个名字,是因为它已受到了大多数的广泛支持。

  在Visual Studio 2005中,默认情况下,此特性是激活的,但不能与/EP和/P编译选项同时使用。请注意在IDE环境中,不能识别__func__ ,而要用__FUNCTION__ 代替。

  Comeau的用户也应使用 __FUNCTION__ ,而不是 __func__ 。

  C++ BuilderX的用户则应使用稍稍不同的名字:__FUNC__ 。

  GCC 3.0及更高的版本同时支持 __func__ 和__FUNCTION__ 。

使用举例:
void Your_Function(...)
{
.......    
printf("Entering %s\n",__FUNCTION__);
.....
.....
}

__FUNCTION__, __FILE__, __LINE__ (原)相关推荐

  1. C语言便于调试的宏定义 __FILE__、__FUNCTION__、__LINE__、__VA_ARGS__ 参数使用

    __FILE__.__FUNCTION__.__LINE__ 这几个宏定义从名字就可以看出功能: __FILE__:宏在预编译时会替换成当前的源文件名,字符串类型. __FUNCTION__:宏在预编 ...

  2. 利用__FILE__, __LINE__, __FUNCTION__跟踪调试程序

    作为一个Linux系统下的C程序员,你可能发现调试程序是个比较麻烦的工作,虽然已经有gdb,kgdb等专业的调试软件,但如果对这些软件运用不熟练是根本达不到调试程序找出bug的目的的.又或者你对gdb ...

  3. C语言中预定义符 __FILE__, __LINE__, __FUNCTION__, __DATE__, __TIME__ 的使用演示

    本文演示了C语言中预定义符 __FILE__, __LINE__, __FUNCTION__, __DATE__, __TIME__ 的使用. 这几个预定义符的名称就没必要再介绍了,顾名思义嘛. // ...

  4. __FILE__,__LINE__,FUNCTION__实现代码跟踪调试(linux下c语言编程 )(转自IT博客)

    先看下简单的初始代码:注意其编译运行后的结果. root@xuanfei-desktop:~/cpropram/2# cat global.h //头文件 #ifndef CLOBAL_H       ...

  5. C语言预定义宏 __func__、__FUNCTION__、__LINE__、__FILE__、__DATE__、__TIME__

    文章目录 20211231 打印示例 今天看RXW源码的时候,看到了在函数里使用 __func__ 参数的样例,遂查一下这两玩意的使用方法 这玩意叫做预定义宏 标准C语言预处理要求定义某些对象宏,每个 ...

  6. C 预处理器 —— __DATE__ # __TIME__ # __FILE__ # __LINE__ # __STDC__ (预处理宏的使用 —— 打印debug信息:)

    预定义宏: ANSI C 定义了许多宏.在编程中您可以使用这些宏,但是不能直接修改这些预定义的宏. 宏    描述 __DATE__    当前日期,一个以 "MMM DD YYYY&quo ...

  7. 转大神的日志 【大杂烩】杂7杂8的东西

    2013.8.21 今天是第一天搬到5栋,新的环境,新的面孔.工作上暂时没有安排,可以先看看资料,早上把iptables重新看了一下,整理了一下链和表的关系,并且在MR3080上进行了实验. 2013 ...

  8. 【大杂烩】杂7杂8的东西

    2013.8.21 今天是第一天搬到5栋,新的环境,新的面孔.工作上暂时没有安排,可以先看看资料,早上把iptables重新看了一下,整理了一下链和表的关系,并且在MR3080上进行了实验. 2013 ...

  9. 嵌入式C语言——学习笔记

    嵌入式C语言--学习笔记 计算机程序语言的学习思路? GCC的使用及其常用选项介绍 gcc概述 C语言编译过程 C语言常见的错误 预处理的使用 宏展开下的 #.## C语言常用关键字及运算符操作 关键 ...

最新文章

  1. 中gcd函数_欧拉函数φ(n)的计算及欧拉定理
  2. Android中的线性布局
  3. 从长板和咏春看单板滑雪固定器角度选择
  4. 变压器轻载是什么意思?
  5. 第十八天:规划风险管理和识别风险
  6. poj 2236 WirelessNetwork 并查集
  7. Python十进制转十五进制
  8. C语言实现查找一组数中的众数
  9. 软件测试面试题:Jmeter怎么录制脚本,怎么过滤,线程组有哪些内容?
  10. opnet之变量类型
  11. Linux命令老是记不住?一篇文章帮你解决。Linux常用命令汇总
  12. 反病毒工具-Wsyscheck,Xuetr,PowerTool
  13. 企查查爬虫循环获取信息
  14. 如何做好软件系统的需求调研,七种武器让你轻松搞定
  15. Linux学习笔记--12(iptables与firewalld)
  16. 基于Linux2.6内核的嵌入式手持设备开机LOGO修改
  17. 44道JS难题,做对一半就是高手
  18. Foxmail 邮件的备份与恢复
  19. 当好色女子遇上好色之徒-案例
  20. 首个高温红色预警来了,气象预警你了解多少?

热门文章

  1. shell切割日志脚本
  2. Open Source Web Design!
  3. Blueprint:一个Flash Builder代码示例的扩展
  4. asp.net 2中的图片上传
  5. linux系统安装锐捷客户端下载,Linux在宿舍里如何上网?--Fedora下锐捷802.1x客户端软件的安装和使用方法...
  6. java sox语音_Sox语音转换的相关知识
  7. 指定rviz的点启动_好消息!武汉已经启动新冠疫苗紧急接种工作
  8. php设置请求头部,php curl如何设置自定义请求头
  9. php mongodb 连接失败,解决PHP使用普通账号连接mongodb报错问题
  10. vs code html table,vs Code 快速生成代码