3

wglGetProcAddress を使用してコードで GL 関数を取得しています。ガイドの作成者 (https://sites.google.com/site/opengltutorialsbyaks/introduction-to-opengl-3-2---tutorial-01) は、次のような関数を定義する必要があると述べています。

extern PFNGLCREATEPROGRAMPROC glCreateProgram;

extern キーワードの使用。しかし、私はそれなしで試してみましたが、動作します (コンパイルは正常に完了し、プログラムは関数を正常に使用します)。なぜこのキーワードが一般的に必要なのですか? この場合は?

4

1 に答える 1

3

extern定義された名前が別のコンパイル単位にあることをコンパイラーに通知します。デフォルトでは、グローバル関数定義がありexternます。だから、それがあなたのケースでうまくいった理由をカバーしています。

それを使用しなければならない場所は、グローバル変数を定義および宣言するときです。

コンパイルユニットが認識しなければならないグローバル変数(ミューテックスなど)がある場合は、そのユニットで使用できるようにする必要があります。しかし、これを行う場合:

int a; // in global scope

コンパイラは、プログラムの静的メモリにメモリを割り当てようとし、再定義エラーを出します。externここで私たちの救助に来ます。書くことによって:

extern int a;

グローバルの宣言を提供していますが、メモリを割り当てていません。

ただし、このようなグローバルの使用は推奨されていないため、使用されていることはめったにありません。

于 2012-09-15T00:33:09.263 に答える