Teensy 的#include <TimeLib.h> 被 Arduino 覆盖了

Teensy's #include <TimeLib.h> got overridden by Arduino

在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) 复制到我的 sketch 文件夹,但没有成功:

#include "Time\TimeLib.h"

如何确保我在 Arduino 中使用的是未签名的 32 位 time_t? 我还想当我调用 now() 时,Teensy 的 now() 是 returns unsigned long time_t,不是内置的long int time_t

提前致谢!

在 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

所以这不是一个被忽略的谜。否则你会因为类型冲突而无法编译。