C语言实战篇-----调试关键参数+printf输出_文件名_函数名_执行数!!!

背景说明

这边先来个案例
在这里插入图片描述
案例中实现了函数名的文件,调试执行的行数,以及函数名

我们在代码中会经常看到以下定义

#define SAK_PRINT_LOG(module,level,fmt, ...) \
do \
{ \
    PrintLog(module,level, \
             __FILE__,__LINE__,(const char*)__func__, \
             fmt,##__VA_ARGS__); \
}while(0)

调试所使用的C语言关键字以及解释

part-one

  • fmt
  • # 用来把参数转换成字符串
  • ## 运算符可以用于宏函数的替换部分。这个运算符把两个语言符号组合成单个语言符号,为宏扩展提供了一种连接实际变元的手段
  • VA_ARGS 是一个可变参数的宏,很少人知道这个宏,这个可变参数的宏是新的C99规范中新增的,目前似乎只有gcc支持(VC6.0的编译器不支持)。实现思想就是宏定义中参数列表的最后一个参数为省略号(也就是三个点 … )。
  • ##__VA_ARGS 宏前面加上##的作用在于,当可变参数的个数为0时,这里的##起到把前面多余的","去掉的作用,否则会编译出错

part-two

  • __FILE __ ,输出文件名称
  • __LINE __, 输出当前执行行数.
  • __func __ 输出函数功能名称
  • __FUNCTION __ 输出函数功能名称
  • __TIME __ 前源文件的编译时间
  • __DATE __ 输出当前文件编译时间信息

part-three

  • … : 可变参数

  • / 连接上下行(当一行代码太长了,可以加改符号进行两行代码显示)

  • #ifdef __cplusplus
    extern “C” {
    #endif
    下面会详细说明

关键字测试

环境说明
cfree 5进行测试
stm32 进行测试

测试part-one and part three

【#】的测试


#include <stdio.h> 
#define debug_out(date)\
 printf("string = %s,date = %d\r\n",#date,date)
int main()
{
	debug_out(4);
	debug_out(3+4);
}

结果如下
在这里插入图片描述
VA_ARGS ,##__VA_ARGS, … 】的测试

#include <stdio.h> 

#define FOO(...)       printf(__VA_ARGS__)

#define dgbmsg(fmt,...)     printf(fmt,##__VA_ARGS__)

#define printf_my(fmt, ...)  printf("%s\r\n %s\r\n %s\r\n %s\r\n %d\r\n"fmt, __FILE__, __FUNCTION__, __DATE__, __TIME__, __LINE__, ##__VA_ARGS__)\

int main()
{
	int y = 6;
	FOO("Y = %d\n",y);
	printf("----------------------\r\n");
	dgbmsg("OK\r\n");
	printf("----------------------\r\n");
	printf_my("Y= %d\r\n",y);
	printf("----------------------\r\n");
}

结果如下
在这里插入图片描述

测试part-two

#include <stdio.h> 

int main()
{
    printf("当前代码行:%d\n", __LINE__); 

    printf("当前源代码文件名:%s\n", __FILE__); 

    printf("当前文件编译的日期%s\n", __DATE__); 

    printf("当前文件编译的时间%s\n", __TIME__); 
    
    printf("当前文件编译的函数名称%s\n",__FUNCTION__); 
    
    printf("当前文件编译的函数名称%s\n",__func__); 
}

运行结果

在这里插入图片描述

实际使用

强烈推荐:宏定义一个好用的printf

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值