¿Debo usar long long o int64_t para el código portátil?

Tengo un código base de código abierto que está escrito en C y C ++. Estoy buscando un tipo entero que se garantiza que seaal menos 64 bits de ancho, que se puede compilar de manera confiable en la mayoría de las cajas OS X (Intel, 64 bits) y Linux con compiladores de código abierto C y C ++, sin mucho trabajo adicional por parte del usuario final. Windows y el soporte de cliente de 32 bits no son importantes en este momento.

Hice algunas pruebas en OS X, y el último GCC que viene con las herramientas del desarrollador no es compatible con el modo C + 11 (y, por lo tanto, no parece garantizar la disponibilidad delong long). Clang tampoco soporta esto, aunque soportalong long si el modo C99 está habilitado, después de una cierta versión.

Es la sugerencia general de usar.int64_t en lugar delong long, cuando la portabilidad es un objetivo importante? Usar los especificadores de formato parece doloroso.

¿Puedo lanzar unaint64_t along long (y también a launsigned equivalente conuint64_t) para usarlo con las funciones y bibliotecas existentes que tomanlong long como parametros? (Y viceversa, por supuesto.)

En ese estado de ánimo, si envío código que requiere la funcionalidad Clang no en GCC, ¿Clang reemplazará a GCC como el compilador de elección en Linux? ¿Es ese compilador algo que puedo esperar, en su mayor parte, al ofrecer código fuente a los usuarios finales?

Básicamente, me gustaría pedir algunos consejos de otros desarrolladores que han utilizado ambos tipos para códigos C y C ++ portátiles, que podrían tener algunas sugerencias sobre cuál podría ser el mejor camino a largo plazo, teniendo en cuenta el objetivo anterior .