=Start=
缘由:
学习提高
正文:
参考解答:
`
__FUNCTION__ is non standard, __func__ exists in C99 / C++11. The others (__LINE__ and __FILE__) are just fine.
It will always report the right file and line (and function if you choose to use __FUNCTION__/__func__). Optimization is a non-factor since it is a compile time macro expansion; it will never effect performance in any way.
`
#include <stdio.h> void testFunc() { printf( "File = %s\nLine = %d\nFunc=%s\nDate=%s\nTime=%s\n" , __FILE__, __LINE__, __FUNCTION__, __DATE__, __TIME__); } int main( int argc, char * argv[]) { testFunc(); getchar(); return 0 ; } |
利用这几个预定义的宏,可以实现一些代码跟踪调试的功能。
参考链接:
https://gcc.gnu.org/onlinedocs/cpp/Standard-Predefined-Macros.html
https://stackoverflow.com/questions/597078/file-line-and-function-usage-in-c
https://stackoverflow.com/questions/5047597/file-in-h-what-does-it-resolve-to
[笔记]C语言中预定义符 __FILE__, __LINE__, __FUNCTION__, __DATE__, __TIME__ 的使用演示
http://www.cnblogs.com/journeyonmyway/archive/2012/09/07/2674410.html
__FILE__,__LINE__,FUNCTION__实现代码跟踪调试(linux下c语言编程)
http://www.cnitblog.com/zouzheng/archive/2007/08/31/32691.aspx
C/c++几个预定义的宏:__DATE__,__TIME__,__FILE__,__LINE__
http://c.biancheng.net/cpp/html/2552.html
linux 中C语言便于调试的宏定义编写及 __FILE__,__FUNCTION__, __LINE__参数使用
http://blog.csdn.net/edonlii/article/details/8491342
=END=
《“Linux下C语言中的预定义宏”》 有 1 条评论
C语言宏的特殊用法和几个坑
http://hbprotoss.github.io/posts/cyu-yan-hong-de-te-shu-yong-fa-he-ji-ge-keng.html
http://gcc.gnu.org/onlinedocs/cpp/Macros.html
`
宏基础 —— 宏仅仅是在C预处理阶段的一种文本替换工具,编译完之后对二进制代码不可见。基本用法如下:
1. 标识符别名
2. 宏函数
宏特殊用法:
1. 字符串化(Stringification)
2. 连接(Concatenation)
几个坑:
1. 语法问题
由于是纯文本替换,C预处理器不对宏体做任何语法检查,像缺个括号、少个分号神马的预处理器是不管的。这里要格外小心,由此可能引出各种奇葩的问题,一下还很难找到根源。
2. 算符优先级问题
3. 分号吞噬问题
4. 宏参数重复调用
5. 对自身的递归引用
6. 宏参数预处理
`