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 选项,或由其他一些#defines 触发的另一个代码块。在这种情况下,您必须至少定义一个空宏,以便您可以在这样的声明中安全地使用它,并且如果该宏恰好被重新定义为非空值 - 它将按原样使用。

于 2012-07-25T09:43:44.880 回答