Czy powinienem używać długiego lub int64_t dla przenośnego kodu?
Mam kod źródłowy open-source, który jest napisany w C i C ++. Szukam typu całkowitego, który jest gwarantowanyprzynajmniej 64 bity szerokości, które można niezawodnie skompilować na większości systemów OS X (Intel, 64-bit) i Linux z kompilatorami C i C ++ typu open-source, bez dodatkowej pracy ze strony użytkownika końcowego. Obsługa Windows i 32-bitowego klienta nie jest obecnie ważna.
Przeprowadziłem kilka testów na OS X, a najnowszy GCC, który jest dostarczany z narzędziami programistycznymi, nie obsługuje trybu C + 11 (a zatem nie gwarantuje dostępnościlong long
). Clang też tego nie obsługuje, chociaż obsługujelong long
jeśli tryb C99 jest włączony, po określonej wersji.
Czy ogólna sugestia jest do użyciaint64_t
zamiastlong long
, kiedy przenośność jest ważnym celem? Używanie specyfikatorów formatu wydaje się bolesne.
Czy mogę rzetelnie rzucićint64_t
dolong long
(i podobnie dounsigned
odpowiednik zuint64_t
) używać go z istniejącymi funkcjami i bibliotekamilong long
jako parametry? (I znowu, oczywiście.)
W takim umyśle, jeśli wysyłam kod, który wymaga funkcji Clang nie w GCC, czy Clang zastąpi GCC jako kompilator z wyboru w Linuksie? Czy ten kompilator jest czymś, czego mogę się spodziewać w większości przypadków, gdy oferuję kod źródłowy użytkownikom końcowym?
Zasadniczo chciałbym poprosić o kilka porad od innych programistów, którzy używali obu typów dla przenośnego kodu C i C ++, którzy mogą mieć pewne sugestie dotyczące tego, co może być lepszym długoterminowym sposobem, biorąc pod uwagę powyższy cel. .