今天在查看API时,我遇到了一些对我来说似乎陌生的函数声明。
GLAPI void GLAPIENTRY glColor3b (GLbyte red, GLbyte green, GLbyte blue);
应该如何解释前三个标记?我不知道该用什么谷歌搜索...
答案 0 :(得分:3)
GLAPI
和GLAPIENTRY
将成为宏。它们将扩展到特定于平台的令牌,这些令牌描述符号的处理方式,调用约定(如果不是默认值)以及应如何(静态或动态)找到符号。
OpenGL之所以使用这样的宏,是因为同一头文件可在多个不同的编译器(通常是OS)上运行。头文件的其他部分使用预处理器查询它们在哪个编译器/ OS上,并更改这些预处理器令牌以在该平台上执行“正确”的操作。
对于void
,这意味着该函数不返回任何内容。
如果创建指向glColor3b
的函数指针,则您可能必须关心这些标记的作用,因为函数指针通常在其中包含调用约定信息。另外,如果构建设置搞砸了,则可能会产生错误(例如链接错误)。但是除了这些情况,您可以忽略它们。
在3种不同的编译器上,它可能会扩展为:
extern void glColor3b (GLbyte red, GLbyte green, GLbyte blue);
__declspec(dllimport) void __stdcall glColor3b (GLbyte red, GLbyte green, GLbyte blue);
__stdcall void glColor3b (GLbyte red, GLbyte green, GLbyte blue);