私はCとC++の両方で書かれたオープンソースのコードベースを持っています。私はで少なくともの64ビット幅であることが保証されている整数型を探しています。これは、オープンソースのCおよびC++コンパイラを搭載したほとんどのOS X(Intel、64ビット)およびLinuxボックスで確実にコンパイルできます。エンドユーザーの側で余分な作業が必要になります。現時点では、Windowsと32ビットクライアントのサポートは重要ではありません。ポータブルコードにlong longまたはint64_tを使用する必要がありますか?
私はOS Xでいくつかのテストを行いました。開発ツールに同梱されている最新のGCCはC + 11モードをサポートしていないため、long long
の可用性は保証されていないようです。 Clangはこれもサポートしていませんが、C99モードが有効な場合は特定のバージョンの後にlong long
をサポートします。
移植性が重要な目標である場合、long long
の代わりにint64_t
を使用することをお勧めしますか?書式指定子の使用は苦しいようです。
は、私は確実にパラメータとしてlong long
を取り、既存の機能とライブラリでそれを使用するために(そして同様にuint64_t
と同等unsigned
に)long long
にint64_t
をキャストすることはできますか?
GCCにないClangの機能を必要とするコードを出荷すると、ClangはGCCをLinuxの選択されたコンパイラとして置き換えようとしていますか?エンドユーザーにソースコードを提供する際に、コンパイラは何かを期待できますか?
基本的には、移植性の高いCおよびC++コードに両方のタイプを使用している他の開発者からのアドバイスをお願いしたいと思います。目標を念頭に置いて
gccはC++ 11より前の拡張として 'long long'を持っていましたので、gcc拡張を無効にしない限り、gccで' long long'を使うとうまくいくはずです(実際は私は思いません私は長い間ずっと長い間長い間提供していないコンパイラを使っていました。 – Grizzly
'int64_t'には基底型' long'や 'long long'があり、オーバーロードが必要な場合に移植性の問題を引き起こす可能性があることに注意してください。 –
また、プラットフォームごとに簡単に変更できるようにtypedefを検討してください。 – imallett