我不理解的函数声明

时间:2020-08-27 13:13:56

标签: c++

今天在查看API时,我遇到了一些对我来说似乎陌生的函数声明。

GLAPI void GLAPIENTRY glColor3b (GLbyte red, GLbyte green, GLbyte blue);

应该如何解释前三个标记?我不知道该用什么谷歌搜索...

1 个答案:

答案 0 :(得分:3)

GLAPIGLAPIENTRY将成为宏。它们将扩展到特定于平台的令牌,这些令牌描述符号的处理方式,调用约定(如果不是默认值)以及应如何(静态或动态)找到符号。

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);