首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >OpenGL标头中特定于平台的宏

OpenGL标头中特定于平台的宏
EN

Stack Overflow用户
提问于 2011-12-08 23:17:31
回答 1查看 1.3K关注 0票数 2

我正在解析gl.h,我注意到了一种非常不寻常的(至少对我而言)声明openGL函数的方式。下面是一个示例:

代码语言:javascript
复制
GLAPI void APIENTRY glEvalCoord1d( GLdouble u );
GLAPI void APIENTRY glEvalCoord1f( GLfloat u );
GLAPI void APIENTRY glEvalCoord1dv( const GLdouble *u );

显然,这些都是返回类型为void的常规函数,但我的问题是关于GLAPI和APIENTRY宏的效果。这两个是特定于平台的,在头文件的开头声明:

代码语言:javascript
复制
/* GLAPI, part 1 (use WINGDIAPI, if defined) */
#if defined(__WIN32__) && defined(WINGDIAPI)
#  define GLAPI WINGDIAPI
#endif

/* GLAPI, part 2 */
#if !defined(GLAPI)
#  if defined(_MSC_VER)                        /* Microsoft Visual C++ */
#    define GLAPI __declspec(dllimport)
#  elif defined(__LCC__) && defined(__WIN32__) /* LCC-Win32 */
#    define GLAPI __stdcall
#  else                                        /* Others (e.g. MinGW, Cygwin, non-win32) */
#    define GLAPI extern
#  endif
#endif

/* APIENTRY */
#if !defined(APIENTRY)
#  if defined(__WIN32__)
#    define APIENTRY __stdcall
#  else
#    define APIENTRY
#  endif
#endif

我想做一个代码解析器,它可以穿透头部并列出它们的内容,所以我的问题是如何处理这些宏,以及如何处理它们。

我对C++还很陌生,所以那些不规则的函数声明对我来说并不熟悉。我发现__declspec(dllimport)和__stdcall基本上是微软用来处理win32应用程序接口和DLL的东西,我知道“外部”是什么意思,但是对于APIENTRY来说,win32版本是__stdcall,但是"else“似乎没有定义APIENTRY到任何东西,这是否意味着它只是简单地用什么都不用来替代APIENTRY?

两者之间的区别是什么:

代码语言:javascript
复制
void glEvalCoord1d( GLdouble u );
__stdcall void __stdcall glEvalCoord1d( GLdouble u );
EN

回答 1

Stack Overflow用户

发布于 2012-02-16 01:54:39

您可以使用预处理器来执行此任务,如下所示:

代码语言:javascript
复制
gcc --nostdinc -E -DGLAPI="" -DAPIENTRY="" yourHeader.h > cleanedFile.h
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8433214

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档