Конфликты объявлений между time.h и linux/time.h не позволяют мне использовать CLOCK_TAI

Я хотел бы использовать

#include <time.h>
clock_gettime(CLOCK_TAI, &...);

но, к сожалению CLOCK_TAI не определен в заголовке stock time.h (по крайней мере, в openSUSE 13.2). Однако он определен в linux/time.h и фактически поддерживается операционной системой. Но если я включу последний заголовок, он вызовет кучу конфликтов объявлений - как по сравнению с time.h, так и bits/types.h. Включение только linux/time.h не помогает, так как time.h и / или bits/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 значение?

0 ответов

Другие вопросы по тегам