首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >编译旧的C代码Y2038仍然会产生4个字节变量

编译旧的C代码Y2038仍然会产生4个字节变量
EN

Stack Overflow用户
提问于 2022-03-24 08:24:59
回答 1查看 138关注 0票数 1

根据本综述,为了编译符合旧代码的Y2038,我们只需要向gcc添加预处理宏__USE_TIME_BITS64,但这似乎不适用于Debian 12 (书虫)的ARMv7板:

代码语言:javascript
运行
复制
#include <sys/types.h>
#include <sys/stat.h>

#include <stdio.h>
#include <unistd.h>

int main(void)
{
    struct stat sb;

    printf("sizeof time_t: %zu\n", sizeof(time_t));
    printf("sizeof stat timestamp: %zu\n", sizeof(sb.st_atime));

    return 0;
}

time_t仍然是4个字节:

代码语言:javascript
运行
复制
root@debian:~# gcc -D__USE_TIME_BITS64 time.c -o time
root@debian:~# ./time
sizeof time_t: 4
sizeof stat timestamp: 4
root@debian:~#

glibc是2.33,我做错什么了?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-03-24 08:49:01

根据这个职位 (它现在有点老了,其中一些部分可能不再相关):

..。定义_TIME_BITS=64将导致所有时间函数默认使用64位时间。_TIME_BITS=64选项是通过透明地将标准函数和类型映射到其内部64位变量来实现的。Glibc还将设置__USE_TIME_BITS64,用户代码可以对其进行测试,以确定64位变体是否可用。

这大概包括制作time_t 64位。

因此,如果您的glibc版本完全支持这一点,那么看起来您设置的宏是错误的。你想:

-D_TIME_BITS=64

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71599103

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档