我有一个相当大的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++相关问答推荐

如何将字符串传递给函数并返回在C中更改的相同字符串?

用C宏替换strncMP函数中的参数

如何在c++中包装返回空*的函数

是否可以通过调用两个函数来初始化2D数组?示例:ARRAY[STARTING_ROWS()][STARTING_COLUMNS()]

如何计算打印二叉搜索树时每行所需的空间?

为什么双精度d=flt_max+flt_max;在c语言中得到inf的结果

我的C函数起作用了,但我不确定为什么

C:在编译时构建和使用字符串文字的预处理器宏?

将字符串数组传递给C中的函数:`str[dim1][str_size]`vs`*str[dim1]`

C将数组传递给函数以修改数组

将回调/基于事件的C API转换为非回调API

为什么会导致分段故障?(C语言中的一个程序,统计文件中某个单词的出现次数)

生成一个半RNG,结果用C表示(无随机/随机)

正在try 理解C++中的`正在释放的指针未被分配‘错误

即使客户端不发送数据,也会发生UNIX套接字读取

DennisM.Ritchie的C编程语言一书中关于二进制搜索的代码出现错误?

为什么 C 字符串并不总是等同于字符数组?

解释 printf("%# 01.1g",9.8) 中的格式说明符

在C语言中,如果我们比较无符号短整型和无符号字符(比较位),会发生什么?

避免在C编程中为连接分配大量内存