0

私はopengl esの本を読んでいて、ソースコードでこのマクロを見つけました

///
//  Macros
//
#define ESUTIL_API
#define ESCALLBACK

実装ファイル .c の後半

void ESUTIL_API esInitContext ( ESContext *esContext )
{
   if ( esContext != NULL )
   {
     memset( esContext, 0, sizeof( ESContext) );
   }
}

私がマクロを理解していることから、それらはマクロによって定義されたものを置き換えるだけです..ただし、この場合のポイントはわかりません。

ありがとう。

4

4 に答える 4

3

この種のマクロは、コンパイラーが使用する呼び出し規約を変更するために使用されます。

#define ESUTIL_API  // nothing, use the standard calling convention

また

#define ESUTIL_API __fastcall // use the fastcall calling convention

呼び出し規約は通常、戻り型と関数識別子名の間の関数定義に入れる必要があります。

于 2012-07-25T09:41:31.860 に答える
0

この場合は単なるプレースホルダーであり、関数宣言に装飾を追加する必要がある場合に備えて、より具体的には__declspec(dllexport)、呼び出し規約やインライン化要件などを追加します。

于 2012-07-25T09:41:59.673 に答える
0

この場合、ESUTIL_API マクロを呼び出し規約の仕様に置き換えることができます。

于 2012-07-25T09:42:45.807 に答える
0

そのマクロが別の場所 (または条件) で定義されている場合があります。たとえば、コンパイラの -D オプションや、他の によってトリガーされる別のコード ブロックです#define。その場合、そのような宣言で安全に使用できるように、少なくとも空のマクロを定義する必要があります。マクロがたまたま空でない値に再定義された場合は、そのように使用されます。

于 2012-07-25T09:43:44.880 に答える