欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

一起talk C栗子吧(第一百六十九回:C语言实例--再谈内置宏)

程序员文章站 2022-08-11 12:59:09
各位看官们,大家好,上一回中咱们说的是c语言中的布尔–bool类型的例子,这一回咱们说的例子是:再谈内置宏 。闲话休提,言归正转。让我们一起talk c栗子吧!...

各位看官们,大家好,上一回中咱们说的是c语言中的布尔–bool类型的例子,这一回咱们说的例子是:再谈内置宏 。闲话休提,言归正转。让我们一起talk c栗子吧!


看官们,我们在第一百二十四回中介绍了c语言中的内置宏,当时介绍了常用的内置宏_line__file_。并且介绍了如何使用它们来输出它们所在位置的行号和所在的文件名。大家都知道,这两个内置宏经常被用来在文件中添加调试信息。因为我们写的程序难免会有错误,所以需要对程序进行调试。在文件中加入内置宏后,我们通过调试可以快速地找到错误发生在哪个文件中的哪一行。这样就可以快速修改程序中的错误,进而提高了工作效率。不过有些看官在调试时不满足于文件名和行数,他们还想知道与错误有关的日期和时间,这也是我们再谈内置宏的原因。

在本章回中, 我们将和大家一起看另外两个内置宏_date__time_。它们表示程序编译的日期和时间。接下来我们通过具体的代码来说明这两个内置宏的用法,下面是详细的代码请大家参考:

#include

void func()
{
    int len=2;

    while(len-- >0)
    {
        printf("sleeping ... \n");
        sleep(1);
    }

}
int main()
{
    printf("file :%s line:%d date:%s,time:%s \n",__file__,__line__,__date__,__time__);
    func();
    printf("file :%s line:%d date:%s,time:%s \n",__file__,__line__,__date__,__time__);

    return 0;
}

我们在代码中通过内置宏来输出当前的文件名和行号以及编译文件的日期和时间,下面是程序的运行结果,请大家参考:

file :test.c line:17 date:jun 30 2016,time:20:45:39 
sleeping ... 
sleeping ... 
file :test.c line:19 date:jun 30 2016,time:20:45:39 

从上面的程序运行结果中可以看到该程序的文件名、编译日期和时间。不过输出了两次,之所以这样做是为了强调_time_宏代表的是程序的编译时间,而不是程序的运行时间。大家可以看到,我们使用内置宏输出时间时,第一次是在调用func()函数之前,第二次是在调用func()函数之后,而代码中的func()函数让程序休眠了2秒。正常来说,输出的时间应该延迟两秒,但是我们两次输出的时间是相同的,这说明该方法输出的时间不是程序的运行时间,而是程序的编译时间。这也算是一种反证法吧,哈哈。

说明了这么多,这个与日期和时间有关的内置宏有什么作用呢?看官莫急,且听我给大家娓娓道来。在实际工作的时候,我们不可能一天完成某个大型程序,因此就会有多个版本的程序。如果程序出错的时候,我们能够知道是程序编译的日期和时间,就能依据程序版本的发布日期和时间推算出发生错误的版本,在一个具体的版本中查找错误,比在多个版本中查找错误要方便一些,因为这样可以缩小的查找错误的范围,进而快速找到错误发生的原因。鉴于这个原理,我们经常使用日期和时间的内置宏来确认程序的版本。

各位看官,关于再谈内置宏的例子咱们就说到这里。欲知后面还有什么例子,且听下回分解 。