这个C宏的目的是什么?

时间:2012-07-25 09:38:05

标签: c macros

我正在阅读opengl es book,在源代码中我发现了这个宏

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

稍后在实现文件.c

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

从我理解的宏来看,它们只是替换宏定义的内容..虽然我不明白这是什么意思。

感谢。

4 个答案:

答案 0 :(得分:3)

这种宏用于更改编译器使用的调用约定:

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

#define ESUTIL_API __fastcall // use the fastcall calling convention

调用类型调用约定通常放在返回类型和函数标识符名称之间的函数定义中。

答案 1 :(得分:0)

在这种情况下只是一个占位符,以防万一需要在函数声明中添加任何装饰,更具体地说,需要添加__declspec(dllexport),调用约定或内联需求等内容。

答案 2 :(得分:0)

在这种情况下,ESUTIL_API宏可以被调用约定规范替换。

答案 3 :(得分:0)

可能存在一些其他位置(或条件),其中宏的定义不同 - 例如编译器的-D选项,或由其他#define触发的另一个代码块。在这种情况下,你至少定义一个空宏,以便你可以在这样的声明中安全地使用它,并且如果宏恰好被重新定义为非空值 - 它将可以这样使用。