IT博客汇
  • 首页
  • 精华
  • 技术
  • 设计
  • 资讯
  • 扯淡
  • 权利声明
  • 登录 注册

    [原]Linux下获取代码文件名、代码所在行数及日期时间的C程序实现

    zhouzxi发表于 2015-05-14 09:11:57
    love 0

    一、概述
    在实际的软件开发项目中,为了方便排查程序问题,要求在日志文件中输出日志信息所在的程序文件名及日志代码所在的行数。此外,某些软件还会要求将程序启动时的日期时间输出到日志文件中,方便跟踪软件运行状况。
    本文介绍了Linux下获取代码文件名、代码行数及日期时间的C代码实现。

    二、几个标准预定义宏简介
    在C语言中,使用几个标准预定义宏,便可轻松实现获取代码文件名、代码行数及日期时间的功能。
    这几个宏的定义如下(注意:前后都是两条连续的下划线):

    __FILE__:在源文件中插入当前源文件名。
    __FUNCTION__:在源文件中插入当前源代码所在函数名。
    __LINE__:在源代码中插入当前源代码行号。
    __DATE__:在源文件中插入当前的编译日期。
    __TIME__:在源文件中插入当前编译时间。

    三、C代码实现

    /**********************************************************************
    * 版权所有 (C)2015, Zhou Zhaoxiong。
    *
    * 文件名称:FileNameAndLine.c
    * 文件标识:无
    * 内容摘要:打印输出信息所在的代码文件名、所在的行数及日期时间
    * 其它说明:无
    * 当前版本:V1.0
    * 作    者:Zhou Zhaoxiong
    * 完成日期:20150511
    *
    **********************************************************************/
    #include 
    
    // 重定义数据类型
    typedef signed   int    INT32;
    typedef unsigned char   UINT8;
    
    /**********************************************************************
    * 功能描述:主函数
    * 输入参数:无
    * 输出参数:无
    * 返 回 值:无
    * 其它说明:无
    * 修改日期        版本号     修改人            修改内容
    * -------------------------------------------------------------------
    * 20150511        V1.0     Zhou Zhaoxiong        创建
    ***********************************************************************/
    INT32 main()
    {
        UINT8 szContentBuf[256] = {0};
    
        snprintf(szContentBuf, sizeof(szContentBuf)-1, "This log is in [%s], [%s], and lineno is [%d], currenttime is [%s %s].\n", __FILE__, __FUNCTION__, __LINE__, __DATE__, __TIME__);
        printf(szContentBuf);   // 将消息输出
    
        return 0; 
    }
    
    

    四、文件编译及运行结果
    在Linux下执行“gcc -g -o FileNameAndLine FileNameAndLine.c”命令,生成“FileNameAndLine”。然后再执行“FileNameAndLine”命令,程序运行结果如下:

    [zhou|/home/zhou/zhouzx/test] gcc -g -o FileNameAndLine FileNameAndLine.c
    [zhou|/home/zhou/zhouzx/test] FileNameAndLine
    This log is in [FileNameAndLine.c], [main], and lineno is [34], currenttime is [May 18 2015 10:35:55].

    本人微信公众号:zhouzxi,请扫描以下二维码:
    这里写图片描述



沪ICP备19023445号-2号
友情链接