Linux下C语言中的预定义宏


=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 条评论

  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. 宏参数预处理
    `

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注