comprueba si uint64_t está definido

No se garantiza que el tipo uint64_t se defina en plataformas de 32 bits, y el código como

 int main() { uint64_t i = 0; } 

puede dar lugar a errores de comstackción de tipo incomplete type .

¿Hay una directiva de preprocesador para verificar si uint64_t está presente? ¿Alguna otra forma de comprobar si el tipo está definido?

Creo que el enfoque razonable es verificar si la macro asociada UINT64_MAX está definida, por ejemplo,

 #include  /* don't forget to include */ ... #ifdef UINT64_MAX ... #endif 

AFAIK no puede verificar directamente si se define algún sinónimo de tipo. De acuerdo con C99, 7.18.2 Límites de los tipos de enteros de ancho especificado (no tienen copia del estándar de C ++ para confirmar, énfasis mío):

Las siguientes macros tipo objeto especifican los límites mínimo y máximo de los tipos declarados en . Cada nombre de macro corresponde a un nombre de tipo similar en 7.18.1.