CおよびC++の標準では、データ型の正確な長さは指定されておらず、最小長のみが指定されています。サードパーティのライブラリで異なるデータ型の長さ
私はサードパーティ製のライブラリsomeLib.lib
(私のプラットフォーム用にコンパイル済み)とそれに対応するsomeLib.h
を持っています。限り、私はint
Sを使用して、すべてが正常にコンパイルする必要があり、
int getNumber();
void setNumber(int number);
私はこのライブラリを消費するプログラムをコンパイル、コンパイラはsomeLib.h
で定義された署名付きのタイプをチェックします:それは、以下の機能が含まれているとしましょう。
しかし、私のコンパイラのint
が、使用されたコンパイラの長さよりも長くても短くなっても、何が起こるのですか?someLib.lib
?リンク時に検出されますか?ランタイムエラーの原因になりますか?コンパイル方法を知らなくても、someLib.lib
を安全に使用できますか?
これは、 'int'のような単純な型ではほとんど問題ではありません。この種の問題が現れるのは、コンパイラの違いや同じコンパイラ上の異なるオプションによって異なるパディングを持つ構造体です。またはビットフィールドなどの実装定義の詳細を持つフィーチャを使用します。これは、そのような詳細を完全にライブラリ内に含む不透明なインタフェースを持つ1つの理由です。 –