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 .