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