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. .

questionAnswers(2)

yourAnswerToTheQuestion