Должен ли я использовать 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 ++, у которых могли бы быть некоторые предложения относительно того, что может быть лучшим долгосрочным путем, учитывая вышеизложенную цель ,

Ответы на вопрос(2)

Ваш ответ на вопрос