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

一、概述

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

本文介绍了Linux下获取代码文件名、代码行数及日期时间的C代码实现。

二、几个标准预定义宏简介

在C语言中,使用几个标准预定义宏,便可轻松实现获取代码文件名、代码行数及日期时间的功能。

这几个宏的定义如下(注意:前后都是两条连续的下划线):

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

三、C代码实现

/**********************************************************************
* 版权所有 (C)2015, Zhou Zhaoxiong。
*
* 文件名称:FileNameAndLine.c
* 文件标识:无
* 内容摘要:打印输出信息所在的代码文件名、所在的行数及日期时间
* 其它说明:无
* 当前版本:V1.0
* 作    者:Zhou Zhaoxiong
* 完成日期:20150511
*
**********************************************************************/
#include <stdio.h>

// 重定义数据类型
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], and lineno is [%d], currenttime is [%s %s].\n", __FILE__, __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], and lineno is [33], currenttime is [May 11 2015 14:22:34].


本人微信公众号:zhouzxi,请扫描以下二维码:

时间: 2024-12-29 11:48:28

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

Linux下获取本机IP地址的代码

Linux下获取本机IP地址的代码,返回值即为互联网标准点分格式的字符串. #define ETH_NAME "eth0" //获得本机IP地址 char* GetLocalAddress() { int sock; struct sockaddr_in sin; struct ifreq ifr; sock = socket(AF_INET, SOCK_DGRAM, 0); if (sock == -1) { perror("socket"); return NU

Linux下二进制包和源代码包的区分

主要提供三种格式的mysql包:rpm格式.二进制格式.源码格式:(tar打包,gz压缩) rpm格式: libjpeg-devel-6b-33.x86_64.rpm       #rpm格式很好区分, 二进制包: mysql-3.23.58-pc-linux-i686.tar.gz   #二进制格式的包名字很长,有版本号.适应平台.适应的硬件类型等,格式:mysql-<版本>-<OS>-tar.gz 源码包:    php-5.2.14.tar.gz              

怎样在Windows和Linux下写相同的代码

目前,Linux在国内受到了越来越多的业内人士和用户的青睐.相信在不久的将来,在国内为Linux开发 的应用软件将会有很大的增加(这不,金山正在招兵买马移植WPS呢).由于未来将会是Windows和Linux两强鼎立的格局,怎样能够使得开发的软件保持最大的可移植性就成了一个很重要的问题.小弟经过一段时间的摸索,找到了这个问题的圆满解答. 在Linux下,所有的开发工具和库都属于自由软件,可以免费获得并且功能强大.如果这些工具和库都有相应的Windows版,那么我们就能够在Windows和Linu

Linux下获取arm的交叉编译工具链

转载请注明文章:Linux下获取arm的交叉编译工具链 出处:多客博图 这里介绍,Linux下获取arm的交叉编译工具链,比如arm-linux-gnueabihf-gcc.arm-linux-gneabihf-gcc等. 前言 这里有一个专门的说法: “arm-linux-gnueabihf-gcc是由 Linaro 公司基于GCC推出的的ARM交叉编译工具.可用于交叉编译ARM系统中所有环节的代码,包括裸机程序.u-boot.Linux kernel.filesystem和App应用程序.使

在Windows及Linux下获取毫秒级运行时间的方法

在Windows下获取毫秒级运行时间的方法 头文件:<Windows.h> 函数原型: /*获取时钟频率,保存在结构LARGE_INTEGER中***/ WINBASEAPI BOOL WINAPI QueryPerformanceFrequency( _Out_ LARGE_INTEGER * lpFrequency ); /*获取从某个时间点开始的时钟周期数,保存在结构LARGE_INTEGER中**/ WINBASEAPI BOOL WINAPI QueryPerformanceFreq

如何在windows下和linux下获取文件(如exe文件)的详细信息和属性

程序员都很懒,你懂的! 最近在项目开发中,由cs开发的exe的程序,需要自动升级,该exe程序放在linux下,自动升级时检测不到该exe程序的版本号信息,但是我们客户端的exe程序需要获取服务器上新程序的版本号信息.最后由我用java实现linux上exe文件的版本号读取功能.下面是详细代码: package com.herman.utils; import java.io.File; import java.io.FileNotFoundException; import java.io.I

Java-No.01 Java Linux下获取服务器ip地址

1.在window下获取本机ip地址 InetAddress inet = InetAddress.getLocalHost();   System.out.println("本机的ip=" + inet.getHostAddress()); 该方法在linux下获取到的ip为127.0.0.1,原因是你linux服务器上hosts配置了 127.0.0.1 localhost 可以修改hosts下将127.0.0.1改成你的本机真实ip地址 2.linux下代码获取本机ip地址 pu

Linux下获取和设置IP

在Linux下获取关于IP和网关的操作:重点是对struct ifreq 的操作. 那么进入目录/usr/include/net/if.h下看查找struct ifreq结构体. /* Interface request structure used for socket ioctl's. All interface ioctl's must have parameter definitions which begin with ifr_name. The remainder may be in

4.Linux下获取帮助

4.Linux下获取帮助 ·没必要记住所有东西,Linux提供了详细的帮助工具及文档, ·whatis,查看帮助的第一行, ·help:使用-h或者--help获取,如 ls --help或者help ls, ·man:(manual)Linux最常用的帮助命令,将要获取帮助的命令作为参数运行man命令,如man ls, ·man类型共分9种,如man 1 ls,man 5 ls, ·man -k 关键字,可以用来查询包含该关键字的文档,如man -k passwd, ·info:与man类似,