我有一个相当大的C代码库,其中每隔一段时间就使用int而不是time_t.有什么好主意来处理这件事吗.我应该在整个标准库中搜索返回time_t或将其作为参数的函数,还是有更聪明的方法?

据我所知,time_t在64位系统上将是64位,至少在我的系统上是64位.int在64位系统上只有32位.这意味着如果将这样的int用作time_t,则将在2038年用完.

推荐答案

假设你使用的是gcc或clang,如果你使用-Wconversion标志进行编译,它会警告你从一个较大的类型转换为一个较小的类型.

#include <stdio.h>
#include <time.h>

int main()
{
    time_t t = time(NULL);
    int i = t;

    printf("i=%d, t=%ld\n", i, t);

    return 0;
}
[dbush@db-centos7 ~]$ gcc -g -Wall -Wextra -Wconversion -o x1 x1.c
x1.c: In function ‘main’:
x1.c:7:5: warning: conversion to ‘int’ from ‘time_t’ may alter its value [-Wconversion]
     int i = t;
     ^

C++相关问答推荐

函数指针始终为零,但在解除引用和调用时有效

Zig将std.os.argv转换为C类型argv

VS代码C/C++扩展intellisense无法检测环境特定函数'

在C语言中使用scanf()时我无法理解的警告

我编译了一个新的c程序,并收到以下错误

以前版本的tty_ldisc_ops.ioctl()是否也需要文件参数?

为什么在函数内部分配内存空间时需要添加符号?

识别和处理c中整数溢出的最佳方法?

LibpCap禁用监视器模式(C、MacOS)

`#if`条件中是否允许`sizeof`?

如何使用指向 struct 数组的指针并访问数组中特定索引处的 struct

GCC不顾-fno-Builtin-SINCOS旗帜向SINCOS发出呼唤

为什么我会收到释放后堆使用错误?

S的这种管道实施有什么问题吗?

这个C程序在工作中途停止获取输入.我收到分段故障(核心转储).我还是不知道问题出在哪里

C指针概念分段故障

tick.q中的Kdb+键控表语法

如何组合两个宏来初始化C语言中的字符串数组?

令人困惑的返回和 scanf 问题相关

我正在使用 klib 库 我可以使用 (khash) KHASH_SET_INIT_INT64() 负值作为键.因为我在头文件中看到它使用 unsigned long int