DEBUG宏用于控制是否启用调试打印。 参考链接 C语言预处理器 C语言宏定义 解决常见问题 如果在定义和使用条件打印宏时遇到问题,可以考虑以下几点: 宏定义位置:确保宏定义在所有使用它的代码之前。 宏命名冲突:避免使用常见的宏名,以免与其他库或系统宏冲突。
51CTO学堂为您提供C语言调试技巧:利用宏打印文件名、函数名和行号嵌入式软件调试技术专题(2):printf打印高阶技巧视频课程等各种IT领域实战培训课程视频及精品班培训课程
* @brief : 打印文件名、行号、函数名的方法。 ***/ #include <cstdio> //定义打印宏,并在打印信息前加入文件名、行号、函数名 //此宏展开后,类似于printf("123"),printf("456"); #define TRACE_CMH_1 (printf("%s(%d)-<%s>: ",__FILE__, __LINE__, __FUNCTION__), printf) //此宏展开...
简介:C --- 自定义一个宏打印当前文件名、函数名、行号 1. #include <stdio.h>2.3. #define DEBUG(format,...) printf("[File:%s, Line:%d] "format, __FILE__, __LINE__, ##__VA_ARGS__)4.5.6. int main(void)7. {8. DEBUG("hello world\n");9. return 0;10. }11....
1.定义宏 // 这个宏是用来打印错误信息的,其中__FILE__、__FUNCTION__、__LINE__是编译器提供的宏,分别可以用来打印文件名、函数名、和行号#definePRINTERRR(ERROR)({printf("ERROR[%s-%s-%d]:%s\n",__FILE__,__FUNCTION__,__LINE__,ERROR);}) ...
特别是对于异常情况的打印,我们需要快速定位到异常情况的位置。 这时候我们可以使用宏定义来封装一个宏打印函数,这个宏打印函数可以显示打印信息所在的文件、行数、函数名等信息。如: #define DBG_PRINTF(fmt, args...) \ {\ printf("<<File:%s Line:%d Function:%s>> ", __FILE__, __LINE__, __FUNCT...
在编码过程中,小二发现一种神奇的用法:打印时,直接使用宏定义! 于是小二决定自己尝试一把。 1 基础环境 使用的在线编译器是这个 :Coliru (stacked-crooked.com) 在线编译器,使用的 C++ ,默认编译选项是这个样子: g++ -std=c++20 -O2 -Wall -pedantic -pthread main.cpp && ./a.out ...
字符串" "中永远不包含宏,否则该宏名当字符串处理。 宏定义不分配内存,变量定义分配内存。 2.2 带参宏定义 C语言允许宏带有参数。在宏定义中的参数称为形式参数,在宏调用中的参数称为实际参数。 对带参数的宏,在调用中,不仅要宏展开,而且要用实参去代换形参。
ANSIC标准定义了可供C语言使用的预定义宏:__LINE__:在源代码中插入当前源代码行号__FILE__:在源代码中插入当前源代码文件名__DATE__:在源代码中插入当前编译日期__TIME__:在源代码中插入当前编译时间 其中标识符__LINE__和__FILE__一般用来调试程序,打印信息,方便定位错误。
必须有,其实值就是这个__FUNCTION__这是库里的一个宏定义,会操作取函数名 下面的程序你可以运行看看,就是你想要的 include <stdio.h>#include <stdlib.h>#define LOG() printf("func here %s\n", __FUNCTION__)void func(){LOG();}int main(){LOG();func();//system("pause");} ...