Конфликты объявлений между time.h и linux / time.h не позволяют мне использовать CLOCK_TAI
Я хотел бы использовать
#include <time.h>
clock_gettime(CLOCK_TAI, &...);
но, к сожалениюCLOCK_TAI
не определено на складеtime.h заголовок (по крайней мере, в openSUSE 13.2). Однако это определяется вLinux / time.h и фактически поддерживается операционной системой. Но если я включу последний заголовок, это вызовет кучу конфликтов объявления - по сравнению с обоимиtime.h а такжебит / types.h, Включая толькоLinux / time.h не помогает, так какtime.h и / илибит / types.h будут неявно включены общими заголовками, такими какunistd.h или жеstdlib.h, тем не мение.
Поэтому я попытался разрешить конфликты вручную. В частности, первое сообщение об ошибке компилятора было оtimespec
объявление, так что я написал в своем коде:
#include <time.h>
#if defined(__timespec_defined) && !defined(_STRUCT_TIMESPEC)
#define _STRUCT_TIMESPEC
#endif
#include <linux/time.h>
Это сработало, но не без еще одного конфликта сitimerspec
повторное объявление, которое объявляется безоговорочно в обоих заголовках и не заканчивается определениями каких-либо охранников. Поэтому я решил запретить скрытоеtime.h Включение в целом:
#include <linux/time.h>
#ifndef _TIME_H
#define _TIME_H
#endif
Это продолжилось с жалобами компилятора наtimeval
переопределение. Поэтому я забанен неявнымбит / types.h включение также:
#include <linux/time.h>
#ifndef _TIME_H
#define _TIME_H
#endif
#ifndef _BITS_TYPES_H
#define _BITS_TYPES_H
#endif
Хорошо, но это также удаляет важные базовые объявления, на которых распространены такие типы, какsize_t
основаны. Поэтому я попытался пойти в обратном направлении и отключитьLinux / types.h включение:
#ifndef _LINUX_TYPES_H
#define _LINUX_TYPES_H
#endif
#include <linux/time.h>
#ifndef _TIME_H
#define _TIME_H
#endif
Как вы можете догадаться, это привело к системным типам, таким как__kernel_time_t
пропал без вести, что привело к невозможности заявитьtimespec
и так далее.
Вот мне и интересно: можно ли вообще использоватьLinux / ... заголовки в сочетании сstdlib.h и другие часто включаемые файлы? Существуют ли другие способы доступа к системеCLOCK_TAI
значение?