__FILE____FUNCTION____LINE__ 这几个宏定义从名字就可以看出功能:
__FILE__:宏在预编译时会替换成当前的源文件名,字符串类型。
__FUNCTION__:宏在预编译时会替换成当前的函数名称,字符串类型。
__LINE__ :宏在预编译时会替换成当前的行号,整型。
__VA_ARGS__ 是一个可变参数的宏,很少人知道这个宏,这个可变参数的宏是新的C99规范中新增的,目前似乎只有gcc支持(VC6.0的编译器不支持)。

  这几个宏定义,好像在VC6中无法使用,但是在Keil中能够使用。比如GD32的工程:

printf("file:%s,function:%s,line:%d \r\n", __FILE__,__FUNCTION__, __LINE__);

  执行后打印出:


file:..\User\bsp.c,function:bsp_Init,line:85 

  …\User\bsp.c刚好是调用宏定义的文件名,bsp_Init为函数名,85是printf("file:%s,function:%s,line:%d \r\n", __FILE__,__FUNCTION__, __LINE__);所在的行号。

  这几个宏定义和其他的宏定义一样也能用在函数参数中:

void dbg_Info_print(const char *file,const char *func,const int   line)
{printf("file:%s,function:%s,line:%d \r\n", file,func, line);
}/**********************************************************************************************************
*   函 数 名:bsp_Init
*   功能说明:外设初始化函数
*   形    参:
*   返 回 值:
**********************************************************************************************************/
void bsp_Init(void)
{mGPIO_Init();gd_eval_com_init();   dbg_Info_print(__FILE__,__FUNCTION__, __LINE__);while(1){}
}

  打印出:

 Run to app...file:..\User\bsp.c,function:bsp_Init,line:74

C语言便于调试的宏定义 __FILE__、__FUNCTION__、__LINE__、__VA_ARGS__ 参数使用相关推荐

  1. 【嵌入式】C语言程序调试和宏使用的技巧

    00. 目录 文章目录 00. 目录 01. 调试相关的宏 02. # 字符串化操作符 03. ## 连接操作符 04. 调试宏第一种形式 05. 调试宏的第二种定义方式 06. 对调试语句进行分级审 ...

  2. Linux之IFS间隔符、C编程、Makefile工程文件、gdb调试、宏定义、预处理、assert和调试用特殊的宏

    1 间隔符 在shell下的for循环语句中,容器中,各个元素之间 是通过 间隔符 来分开的 默认情况下:读取 列表中的值----以 空格.TAB.换行  为间隔符 列表可以为:     常量    ...

  3. 【C语言笔记】【宏定义系列】 向下舍入到指定数值的倍数

    [C语言笔记][宏定义系列] 向下舍入到指定数值的倍数 宏定义系列内容.用于记录各式各样有用或者没用的宏定义☺. 宏定义说明 用于将一个数向下舍入到小于等于该数的指定数值的倍数. 例如一个要向下舍入的 ...

  4. 【C语言笔记】【宏定义系列】 向上取整到指定数值的倍数

    [C语言笔记][宏定义系列] 向上取整到指定数值的倍数 宏定义系列内容.用于记录各式各样有用或者没用的宏定义☺. 宏定义说明 用于将一个数向上取整到大于等于该数的指定数值的倍数. 例如一个要向上取整的 ...

  5. 关于C语言刷题(#define宏定义函数的常见错误)

    关于C语言刷题(#define宏定义函数的常见错误) 首先我们来先看对#define的定义 define,宏定义,C语言中预处理命令一种.分为无参宏定义和带参宏定义.无参宏定义的一般形式为:#defi ...

  6. __FILE__, __FUNCTION__, __LINE__学习篇,谨以此文告别那无知的岁月

    printf("\n%s,%s,%d\n", __FILE__, __FUNCTION__, __LINE__); 经常会在代码中看到类似于上面的log, 虽然一直很好奇__FIL ...

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

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

  8. c语言求n个数的最小值博客,C语言中的#define宏定义 求一组数的最大值和最小值(转)...

    C语言有很多预编译关键字,如#if.#include.#else--,所有以#开头的的关键字都属于这一类,此处讨论#define关键字 #define的核心就是"替换" 如#def ...

  9. C语言开发必会 宏定义、宏函数

    文章目录 宏定义 宏函数 宏定义之闰年判断 宏定义 宏定义是C中三种预处理方式(宏定义.文件包含.条件编译)的一种,只做替换.不求解. 宏定义分为有参宏定义和无参宏定义两种.应特别注意有参宏定义的括号 ...

最新文章

  1. sql server标识一个字符在这一列中是第几次出现
  2. 仿Twitter的公告效果
  3. Eclipse分栏显示同一个代码文件的设置
  4. 8 张图,看你是否理解 Java
  5. 一步一步学NUnit
  6. 3 Convex functions
  7. 前端学习(2749):uniapp项目目录结构介绍
  8. Dynamics版本历史演进及Dynamics 365重要功能介绍
  9. 【CodeForces - 214C 】Game (拓扑排序,思维)
  10. 欧氏空间内积定义_MP5:内积、外积、面积、Hermite内积、辛内积
  11. linux重新启动某一个项目,Linux运维知识之supervisor更改某项目配置后 需要重新启动才有效...
  12. c#统计字符串中数字字符的个数【C#】
  13. 单点登录解决方案-CAS
  14. 统计图表类库--libchart使用简介
  15. Paypal如何实现循环扣款(订阅)?
  16. 万字长文丨大白话带你由浅入深Python编程语言
  17. 20201228攻防世界WEB模块入门级别全详解通关记录
  18. 微信扫码下载APK解决方案
  19. 爪哇国新游记之十六----泛型单链表类
  20. android轮播图简单实现(左右无限滑动,自动轮播)

热门文章

  1. 华为mate40怎么用鸿蒙,怎么使用鸿蒙系统?
  2. VMware12.0PRo 下安装Ubuntu14.04LTS
  3. java短横线转驼峰_第二讲:Java的运作原理
  4. [unreal4入门系列之十二] 在UE4中创建非玩家角色(NPC)
  5. 找出重复的数java_剑指offer:1.找出数组中重复的数(java版)
  6. 他在京东每天做1000万图灵测试
  7. 没解决这个7次方程问题,为何这三个数学家却很开心
  8. 今年芯片行业最大收购案:亚德诺209亿美元收购美信,对抗行业老大德州仪器...
  9. 西南这座城,脸,比北上广还有用
  10. 花式云毕业:《我的世界》建大学,日本机器人替身领证 | 网友:搞点阳间的东西...