C语言实战篇 您所在的位置:网站首页 c语言输入文件名怎么输 C语言实战篇

C语言实战篇

2024-03-04 00:41| 来源: 网络整理| 查看: 265

背景说明

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

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

#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 #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 #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 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



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有