1

在 Arduino C+ 中,我想在使用 32 位有符号time_t类型时避免 2038 年溢出问题,因此我想专门使用 Teensy 的Time.h(或 TimeLib.h ;我正在写Arduino 1.8.7 上 Teensy 3.5 的代码)。

但是IDE似乎忽略了Teensy的Time.h,其中time_t定义为:

typedef unsigned long time_t;

我发现无论我包含什么,我使用的 time_t 类型都编译为“long int”。这段代码表明:

time_t t = "ABC";

编译器将显示time_ t 实际上是在某个地方定义为long int

invalid conversion from 'const char*' to 'time_t {aka long int}' [-fpermissive]

我什至尝试将 Teensy 的 Time 文件夹(https://github.com/PaulStoffregen/Time)复制到我的草图文件夹中,但这样做无济于事:

#include "Time\TimeLib.h"

如何确保我在 Arduino 中使用无符号的 32 位 time_t?当我调用now()时,我还想要返回 unsigned long time_t的 Teensy 的now(),而不是内置的 long int time_t

提前致谢!

4

1 回答 1

1

在 teensy TimeLib.h 中,它被定义为:

#if !defined(__time_t_defined) // avoid conflict with newlib or other posix libc
typedef unsigned long time_t;
#endif

并将其sys/_types.h定义为:

#define _TIME_T_    long        /* time() */
typedef _TIME_T_    __time_t;

在几个地方使用:

#if !defined(__time_t_defined) && !defined(_TIME_T_DECLARED)
typedef _TIME_T_    time_t;
#define __time_t_defined
#define _TIME_T_DECLARED
#endif

所以它不是一个谜,它被忽略了。否则,由于类型冲突,您将无法编译。

于 2019-06-03T13:32:31.227 回答