Teensy's #includeбыл переопределен Arduino - PullRequest
1 голос
/ 03 июня 2019

В Arduino C + я хотел избежать проблемы переполнения в 2038 году при использовании 32-битного типа time_t со знаком, поэтому я бы хотел специально использовать Time.h от Teensy (или TimeLib.h в этом отношении; я пишу код для Teensy 3.5 на Arduino 1.8.7).

Но IDE, похоже, игнорирует Teensy's 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's Time (https://github.com/PaulStoffregen/Time) в мою папку с эскизами, но безрезультатно:

#include "Time\TimeLib.h"

Как убедиться, что я использую 32-разрядную без знакаtime_t в Arduino? Также я хочу, чтобы при вызове now () это Teensy's now () , который возвращает unsigned long time_t , а не встроенный long int time_t

Заранее спасибо!

1 Ответ

1 голос
/ 03 июня 2019

В подростковом времени 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

Так что это не такая загадка, которую игнорируют. В противном случае вы не сможете выполнить компиляцию из-за конфликтующих типов.

...