Devo usar long long ou int64_t para código portátil?

Eu tenho um código-fonte de código aberto que é escrito em C e C + +. Eu estou procurando um tipo inteiro que é garantido para serfinalmente 64 bits de largura, que podem ser compilados de forma confiável na maioria das caixas OS X (Intel, 64-bit) e Linux com compiladores C e C ++ de código-fonte aberto, sem muito trabalho extra por parte do usuário final. Windows e suporte ao cliente de 32 bits não são importantes no momento.

Fiz alguns testes no OS X, e o último GCC que acompanha as ferramentas do desenvolvedor não suporta o modo C + 11 (e, portanto, não parece garantir a disponibilidade delong long). O Clang também não suporta isso, embora suportelong long se o modo C99 estiver ativado, após uma determinada versão.

É a sugestão geral para usarint64_t no lugar delong long, quando a portabilidade é um objetivo importante? Usando os especificadores de formato parece doloroso.

Posso converter de forma confiável umint64_t paralong long (e também aounsigned equivalente comuint64_t) para usá-lo com funções e bibliotecas existentes quelong long como parâmetros? (E de volta, claro.)

Nesse estado de espírito, se eu enviar o código que requer a funcionalidade do Clang não no GCC, o Clang vai substituir o GCC como o compilador escolhido no Linux? Esse compilador é algo que eu posso esperar, na maioria das vezes, ao oferecer código-fonte para usuários finais?

Basicamente, eu gostaria de pedir alguns conselhos de outros desenvolvedores que usaram os dois tipos de código C e C ++, que podem ter algumas sugestões sobre o que pode ser o melhor caminho a longo prazo, dado o objetivo acima em mente .

questionAnswers(2)

yourAnswerToTheQuestion