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

时间:2019-06-03 11:54:47

标签: c++ arduino time.h time-t teensy

在Arduino C +中,我想避免使用32位带符号 time_t 类型的2038年溢出问题,所以我想专门使用 Time.h < / strong>从Teensy(或者是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的“时间”文件夹(https://github.com/PaulStoffregen/Time)复制到我的素描文件夹中,但无济于事:

#include "Time\TimeLib.h"

如何确保我在Arduino中使用未签名的32位time_t? 我也想当我呼叫 now()时,是Teensy的 now()返回无符号长 time_t 而不是内置的long int time_t

谢谢!

1 个答案:

答案 0 :(得分: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

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