linux下C语言如何得到调用我的函数的文件名和行号
来源:互联网 发布:sentinel数据 编辑:程序博客网 时间:2024/04/30 10:36
之前有看到一篇帖子,帖子内容如下:
/*******************************原文************************/
引自:http://bbs.csdn.net/topics/370006942
linux系统下C语言写了一个函数,我想在这个函数里面打印出调用这个函数的文件的文件名和调用所在行的行号。
请不要告诉我用__FILE__和__LINE__宏,他们只能得到自己所在的文件名和行号,无法得到调用方的文件名和行号。
比如:
file1.c
void
my_fun()
{
/*打印file2.c的文件名和行号(这里应该为5)*/
}
file2.c
extern
void
my_fun();
int
main()
{
my_fun();
return
0;
}
谢谢!!!
原贴有人提出了解决方法,但不是很细,新手可能还是比较迷茫,借鉴规整如下:
方法1、使用传参数的方法,重新封装
my_fun(const char* file, int line);
调用为:my_fun(__FILE__, __LINE__);
但是这种方法每次调用都要传参数比较繁琐,原文中根据作者的需求,也是不能传参的;
方法2、重新封装my_fun函数;
void my_fun(const char* __file__, int __line__);
在全局参数的头文件中定义如下:
#define __my_fun__() my_fun(__FILE__, __LINE__)
调用为:__my_fun__();
这样就实现了原文作者最初的目的,linux下C语言如何得到调用我的函数的文件名和行号。
需要说明的是,如果直接封装
my_fun(){
printf("file = '%s', line = %d\r\n", __FILE__, __LINE__);
}
在其它文件中直接调用my_fun,则打印的永远是my_fun函数所在的文件名称和行号;
方法2实现的原理就是预编译,编译器在编译的时候直接将调用my_fun的__FILE__和__LINE__传递给了my_fun(__FILE__, __LINE__);
- linux下C语言如何得到调用我的函数的文件名和行号
- C/C++语言中如何使用宏打印行号、文件名和函数名
- c语言输出文件名函数名和行号
- C语言 打印文件名,行号,函数名
- C++显示调用函数和行号文件名
- Linux下NASM汇编函数和C语言函数相互调用的方法
- C/C++ 打印文件名、行号、函数名的方法
- C/C++ 打印文件名、行号、函数名的方法 .
- C/C++ 打印文件名、行号、函数名的方法
- C语言实现日志封装--能输出调用函数、文件名、行号
- 如何取的Java源代码文件中文件名和行号
- 如何取的Java源代码文件中文件名和行号
- Linux C语言获取目录下特定类型的文件名
- 通过系统调用basename(), dirname()得到当前路径下的文件名和目录名
- C语言下的函数递归调用
- c语言日志封装-输出文件名、函数名、行号
- 如何通过函数调用得到n个要改变的值(摘抄自谭浩强C语言)
- linux下C和shell调用的popen函数
- 从键盘输入字符串并输出该字符串(汇编程序)
- html 简介和基本格式
- 程序猿讨厌没有价值的任务
- MFC状态栏的使用详解
- 让你的代码看起来更漂亮
- linux下C语言如何得到调用我的函数的文件名和行号
- POJ 3150 Cellular Automaton(矩阵快速幂)
- Appium+Robotframework实现iOS应用的自动化测试-4:OS X中安装和启动RIDE
- Google Python Class 之——带参数的WordCount 实现
- 在Xcode6中添加空工程步骤
- java多选框改成左右多选下拉框
- java线程研究---(9)Thread同步:如何加锁
- testlink case的便捷管理,如何从excel中导入到testlink,定制导出自己想要的格式
- jackson annotations注解详解