宣言された型にプリベークされた "デフォルト"をたくさん使用するC++バックグラウンドのヘッダがいくつかあります。例えば私は互換性の理由からCまでにこれらのヘッダを変換する必要がありC - Cのヘッダの型のデフォルト値の設定方法
// Header.
typedef struct
{
float red;
float green;
float blue;
} RGBColor;
// Defaults.
const RGBColor kRGB_White = {1.0f, 1.0f, 1.0f};
const RGBColor kRGB_Black = {0.0f, 0.0f, 0.0f};
...
// Source file.
RGBColor aColor = kRGB_White;
Q.。できればデータ構造自体を変更することなく、Cヘッダのこれらのデフォルト値を再作成する方法はありますか?
ありがとうございました。
extern const RGBColor kRGB_White;
extern const RGBColor kRGB_Black;
とにリンクされます単一.cファイルに定義を配置します。重複したグローバル定義の問題を防ぐため
私は多くの人が考える信じる 'てRGBColor aColor = kRGB_White;'なぜなら 'int型のfoo [C法的ではありません4] = {1,2,3,4}; int bar [4] = foo'は正当ではなく、配列は構造体よりも多くの露出を持つようです。 – SiegeX
私は 'static const'アプローチを推奨する傾向があります。リンク時クロスモジュール最適化を必要とせずに' const'オブジェクトの定義をコンパイラが利用できるようにします。静的な保存期間を持つオブジェクトを初期化するために 'const'オブジェクトを使うこともできません。そのために' #define KRGB_WHITE_STATIC {1.0f、1.0f、1.0f} 'を作成する必要があります。 – caf
ご協力いただきありがとうございます。 OS X 10.6.6でgcc 4.0を使用すると、 "静的const"アプローチによって "重複シンボル"エラーが発生しました。悲しい顔。そして、さらに悲しいことに、マクロアプローチとしてそれらを再定義することはどちらもうまくいかなかった。私はそれらをexternsとして宣言し、すべてをソースファイルに貼り付けるようアドバイスをしなければならないと思います。乾杯。 – SirRatty