【发布时间】:2020-07-25 15:41:06
【问题描述】:
在 Michael Kerrisk 的书中,我遇到过这样的陈述:
- “gmtime() 和 localtime() 函数将 time_t 值转换为 所谓的故障时间。故障时间放在a
静态分配的结构,其地址返回为
函数结果。
#include <time.h>
struct tm *gmtime(const time_t timep );
struct tm *localtime(const time_t * timep );
/* Both return a pointer to a statically allocated broken-down time structure on
success, or NULL on error */
所以我试图弄清楚说“指向静态分配结构的指针”是什么意思,并在跟踪 “time.h” 文件的源代码时,我到达了文件 glibc/time/localtime.c 按如下顺序跟踪源时; https://code.woboq.org/userspace/glibc/time/gmtime.c.html
https://code.woboq.org/userspace/glibc/time/localtime.c.html#22
据我了解,gmtime() 函数返回一个指向这个全局定义结构的指针,声明如下:
struct tm _tmbuf;
所以我的问题是,到目前为止我是否正确,gmtime 只返回一个指向这个全局结构的指针?如果是这样,下一个问题是,我是否可以在共享库文件中定义全局变量?如果是,如何访问库文件中的这些全局变量?
【问题讨论】:
-
是的,你没看错。但是,您的后续行动尚不清楚。是的,您可以在共享库中拥有全局变量,并像访问任何其他全局变量一样访问它。有什么难理解的?
-
“指向静态分配结构的指针”例如
Person p = Person_create("John", 35, "Canada"); Person *pp = &p所以这里的变量pp是指向静态分配结构的指针