Les conflits de déclaration entre time.h et linux / time.h m’empêchent d’utiliser CLOCK_TAI

Je voudrais utiliser

#include  clock_gettime(CLOCK_TAI, &...); 

mais malheureusement, CLOCK_TAI n’est pas défini dans l’en tête stock time.h (au moins dans openSUSE 13.2). Il est toutefois défini dans linux / time.h et est pris en charge par le système d’exploitation. Mais si j’inclue ce dernier en-tête, cela provoque une série de conflits de déclaration – par rapport à la fois à time.h et à bits / types.h . Inclure uniquement le fichier linux / time.h n’aide pas, car les fichiers time.h et / ou bits / types.h seront implicitement inclus dans les en-têtes communs, comme unistd.h ou stdlib.h .


J’ai donc essayé de résoudre les conflits manuellement. En particulier, le premier message d’erreur du compilateur concernait la redéclaration de timespec , alors j’ai écrit dans mon code:

 #include  #if defined(__timespec_defined) && !defined(_STRUCT_TIMESPEC) #define _STRUCT_TIMESPEC #endif #include  

Cela a fonctionné, mais non sans un autre conflit avec la redéclaration itimerspec , qui est déclarée sans condition dans les deux en-têtes et ne se termine pas par la définition de tout type de garde. J’ai donc décidé d’interdire totalement l’ inclusion implicite de time.h :

 #include  #ifndef _TIME_H #define _TIME_H #endif 

Cela continua avec le compilateur se plaignant de la redéclaration de timeval . J’ai donc également interdit l’inclusion implicite de bits / types.h :

 #include  #ifndef _TIME_H #define _TIME_H #endif #ifndef _BITS_TYPES_H #define _BITS_TYPES_H #endif 

D’accord, mais cela supprime également les déclarations de base importantes, sur lesquelles sont basés des types courants tels que size_t . J’ai donc essayé d’aller dans le sens opposé et de désactiver l’inclusion linux / types.h :

 #ifndef _LINUX_TYPES_H #define _LINUX_TYPES_H #endif #include  #ifndef _TIME_H #define _TIME_H #endif 

Comme vous pouvez le deviner, des types spécifiques au système tels que __kernel_time_t été manqués, ce qui a timespec déclaration de timespec , etc.


Je me demande donc: est-il possible d’utiliser des en têtes linux /… en combinaison avec stdlib.h et d’autres fichiers couramment inclus? Existe-t-il d’autres moyens d’accéder à la valeur CLOCK_TAI spécifique au CLOCK_TAI ?