__FUNCTION__, __LINE__

今天无意之间看到一段代码,里面有这样一个片段:

 if (!interface) {err ("%s - error, can't find device for minor %d",__FUNCTION__, subminor);retval = -ENODEV;goto exit;}

这个__FUNCTION__干嘛的?少见(本人水平不够~),有意思~

后面找了一下,这个是和编译器GCC相关连的宏定义,而这些宏定义的时候有助于高速定位程序报错或警告的位置,在文件里的行数(__LINE__)

给出demo

/*************************************************
code writer : EOF
code date   : 2014.08.17
code file   : macro_demo.c
e-mail      : jasonleaster@gmail.comcode purpose:This code is a demo for how to use some
special macros -- __FILE__ __FUNCTION__ __LINE__
__DATE__ . It's funny and useful to use this Macro
to help you to debug.If there is something wrong with my code,
please touch me by e-mail.**************************************************/#include <stdio.h>void hello(void)
{printf("__FILE__ :%s __FUNCTION__:%s __LINE__:%d __DATE__:%s\n",__FILE__,__FUNCTION__,__LINE__,__DATE__);
}int main()
{printf("__FILE__ :%s __FUNCTION__:%s __LINE__:%d __DATE__:%s\n",__FILE__,__FUNCTION__,__LINE__,__DATE__);hello();return 0;
}

注意,这里的宏定义是不会依据执行时环境变化的,无论我在哪个文件夹下执行这个demo,这里的__FILE__打印出来的字符都永远提示./hello.c 以为还是当前文件夹,事实上执行环境已经发生变化.

当然这些宏定义是十分有助于debug的.

转载于:https://www.cnblogs.com/blfbuaa/p/6905213.html

__FUNCTION__, __LINE__ 有助于debug的宏定义相关推荐

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

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

  2. 宏定义对调试代码的作用

    以如下代码为例: //head.h #ifndef __HEAD_H__ #define __HEAD_H__#define NUM1 10 #define NUM2 20 #endif//sum.c ...

  3. 通过DEBUG宏定义管理debug模式和release模式

    文章目录 一.引言 二.带有前缀信息的debug调试输出 三.不带有前缀信息的debug调试输出 四.总结 一.引言   软件版本通常有debug和release两个版本,器本质上是同一套源代码,只是 ...

  4. 宏定义开关和debug printf,宏定义使用异或交换两数

    1.宏定义开关和debug printf #define DEBUG_PRINT 1#ifdef DEBUG_PRINT #define DEBUG(format, ...) printf(" ...

  5. 关于VS中区分debug与release,32位与64位编译的宏定义

    在vs编程中,常常涉及到32位和64位程序的编译,怎么判断当前编译是32位编译还是64位编译?如何判断 是debug下编译还是release下编译?因为之前用到,这里记录一下,省的忘了又要疯狂的goo ...

  6. android 宏替换_android 模拟宏定义,实现Debug amp; Release 模式-一团网

    以前在C/C++ 开发中,我们可以宏定义,Debug模式下,输出日志,方便测试.Release模式下,无日志输出. 使用Java时,Java 是解释语言,无法编译.就无模式之分了.有没有办法实现,De ...

  7. python 宏定义_python Debug宏定义

    前言 调试python时,常碰到打印信息需手动删除:且python没有宏定义. 依据之前使用C的习惯,定义调试模式,仅调试模式下才打印调试信息. 步骤: 1.增添const.py # -*- codi ...

  8. C语言~宏操作大全(宏定义、内置宏、__FILE__、__LINE__、##用法)

    当然宏定义非常重要的,它可以帮助我们防止出错,提高代码的可移植性和可读性等.下面列举一些成熟软件中常用得宏定义1,防止一个头文件被重复包含 #ifndef COMDEF_H #define COMDE ...

  9. 绝学:用宏定义找BUG,了解一下?

    宏打印函数 在我们的嵌入式开发中,使用printf打印一些信息是一种常用的调试手段.但是,在打印的信息量比较多的时候,就比较难知道哪些信息在哪个函数里进行打印. 特别是对于异常情况的打印,我们需要快速 ...

最新文章

  1. 全球及中国晶圆键合和解键合设备行业竞争格局分析及投资前景评估报告2021年版
  2. python 连接mysql 字符集_Python 操作 MySQL 字符集的问题
  3. 自定义通配器导入bean对象
  4. 1346. 检查整数及其两倍数是否存在 golang
  5. 计算机网络四个阶段的发展特点,计算机网络的发展分哪四个阶段,特点?
  6. linux7 vnc看不到桌面,VNC Viewer轻松连接远程CentOS7桌面
  7. neo4j 删 delete
  8. jenkins pipeline之如何串联多个Job
  9. 多线程开发必须知道的概念
  10. Git用命令提交代码并合并
  11. 使用telnet 方式管理交换机
  12. 电子凸轮设计之数学基础设计
  13. 用Python中的VTK库导入并显示Assembly的STL文件
  14. c语言论坛编程,[原创]了解c语言
  15. 只能上QQ,不能打开网页的解决办法
  16. Springboot 整合 阿里云消息队列RabbitMQ版服务
  17. 微信数据存储WCDB for iOS/macOS
  18. 用canvas代码写或者three.js代码写一张截图,这张截图里面包含4张图片 ,其中3张图片有倾斜立体效果,剩下的一张是背景图...
  19. Java之Scanner类用法
  20. Object类型转换为Integer类型

热门文章

  1. 妈呀,终于搞定VIM的复制粘贴问题了!
  2. 用例子来彻底搞明白Virtual 和 非 virtual(C#)
  3. eclipce如何配置mysql_如何在eclipse配置mysql数据库
  4. 综合评价模型的缺点_浅谈交通影响评价中不同交通预测方法的特性
  5. linux格式化文件,无需格式化就可以转换文件系统
  6. centos mysql stop_[MySQL] 在Centos下的启动和关闭 | 学步园
  7. java 页面 分离 实现_JavaBean实现JSP页面和代码分离
  8. c++ gets()、scanf() 、getline()、cin读取字符、字符串
  9. C++知识点1——基础
  10. C++保存不同的图片格式