在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()时,是Teensy的 now(),它返回未签名的long time_t ,而不是内置的long int time_t

提前致谢!

最佳答案

在TeensyTimeLib.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

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

关于c++ - Teensy的#include <TimeLib.h>被Arduino覆盖,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/56426827/

10-12 17:53