在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
谢谢!
答案 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
所以这不是一个谜,它被忽略了。否则,由于类型冲突,您将无法编译。