Должен ли я использовать long long или int64_t для переносимого кода?
У меня есть кодовая база с открытым исходным кодом, написанная на C и C ++. Я ищу целочисленный тип, который гарантированно будетat least 64-битная ширина, которая может быть надежно скомпилирована на большинстве OS X (Intel, 64-битных) и Linux-систем с компиляторами C и C ++ с открытым исходным кодом, без особых усилий со стороны конечного пользователя. Поддержка Windows и 32-битных клиентов в настоящее время не важна.
Я провел некоторое тестирование на OS X, и последний GCC, который поставляется с инструментами разработчика, не поддерживает режим C + 11 (и, следовательно, не гарантирует доступностьlong long
). Clang это тоже не поддерживает, хотя и поддерживаетlong long
если включен режим C99, после определенной версии.
Это общее предложение использоватьint64_t
на местеlong long
когда мобильность является важной целью? Использование спецификаторов формата кажется болезненным.
Могу ли я надежно броситьint64_t
вlong long
(и аналогичноunsigned
эквивалентноuint64_t
) использовать его с существующими функциями и библиотеками, которые принимаютlong long
как параметры? (И обратно, конечно.)
В этой ситуации, если я отправлю код, который требует функциональности Clang, а не GCC, собирается ли Clang заменить GCC в качестве предпочтительного компилятора в Linux? Можно ли ожидать от этого компилятора большей части предложений исходного кода для конечных пользователей?
По сути, я хотел бы попросить совета у других разработчиков, которые использовали оба типа для переносимого кода на C и C ++, у которых могли бы быть некоторые предложения относительно того, что может быть лучшим долгосрочным путем, учитывая вышеизложенную цель ,