dxlibp (0.5.7) | 2010-02-16 18:39 |
dxlibp_pc.h (Ver0.0.0) | 2009-04-06 11:33 |
DXライブラリPortable HTMLヘルプ (0.5.4) | 2010-01-02 08:22 |
ソースコードがどんな処理をされて実行ファイルになるのか書いてあるサイトが少ないので、ちょろっと書いておきます。
また、少し定義と宣言を区別しておく必要があります。
定義とは関数の処理内容や変数の実体を使えるようにすることです。宣言とは関数や変数の名前や型を決める作業です。
よく変数を宣言するといいますが、変数は宣言すると同時に定義も行われることを覚えておいてください。
さて、ソースコードではなくヘッダファイルに関数の定義を書いてしまって実行ファイルの生成に失敗した経験はありませんか?
ヘッダファイルは大抵の場合複数のソースコードからインクルードされます。上記の場合だと複数のソースコードに関数の定義が存在することになります。ところが、コンパイラは普通にコンパイル作業を終えてしまいます。なぜなら、コンパイラは一度にひとつのソースコードしか見ていないからです。定義がダブっていようが足りなかろうが、自分の見ているソースコード以外はお構いなしです。兎に角機械語を出力するだけ出力して終了します。そして、生成されたオブジェクトファイルの中には同名の実体が複数存在することになってしまいます。
同じ名前の実体が複数あると困るのはリンカです。どれを使って良いのかわかりませんからね。どれが正しくてどちらが間違っているのか、もしかすると同じ内容かもしれない。しかし、リンカはエラーを吐きます。リンカの役目はあくまでオブジェクトファイルをつなぎ合わせることで、どれが正しい実体なのか判断することではないからです。
これに関連して、externの意義も説明します。
といっても、前述の関数と状況は似ています。要するにexternを付けることで変数の宣言と同時に定義が行われないようにしているだけです。
DXPは多くの場合、最高のパフォーマンスを発揮できるように製作されています。ですが、ライブラリ使用者がいくつか注意することによってさらにパフォーマンスを高めることができるでしょう。