[英]C++ Function Type?
我是新手,学习C ++(知道很多Java),以下代码让我感到困惑......
我知道这个代码片段正在处理指向函数的指针(它是一个回调,这是有道理的)但是什么让我失望的是返回类型和函数名之间的参数。 这到底是什么血腥的?
它看起来像一种函数,但我从来没有听说过,甚至在搜索和读取函数指针后,我也无法找到任何提及函数可能有类型的东西。
如果是这样,那么如何定义函数类型?
谢谢,-Cody
GLFWCALL
不是一个类型,它是一个扩展为特定于平台的调用约定的宏,或一个空字符串。 这是glfw.h的修剪片段:
#if defined(_WIN32) && defined(GLFW_BUILD_DLL)
#define GLFWCALL __stdcall
#elif defined(_WIN32) && defined(GLFW_DLL)
#define GLFWCALL __stdcall
#else
/* We are either building/calling a static lib or we are non-win32 */
#define GLFWCALL
#endif
在x86 / win32上使用正确的调用约定非常重要,因为有些调用约会希望调用者可以通过被调用者清理堆栈。 传递参数的顺序也可能存在差异。
在Windows上, GLFWCALL
是__stdcall
的宏,而在其他平台上,它是一个什么都GLFWCALL
的宏。
__stdcall
实现了一个特定的调用约定,并且是普通C或C ++之上的编译器扩展。
宏是在编译器的词法分析器和解析器与它们交互之前替换代码的代码片段。
GLFWCALL
是一个宏,如果需要,可以扩展为调用约定 。 因为这个函数将被外部代码调用,所以它必须使用外部代码所期望的调用约定。 例如,如果函数将其返回值放在堆栈上,而外部代码将它放在寄存器中,则繁荣。
标记为函数签名的一部分的问题是预处理器宏,该宏在头部的其他位置定义。 某些平台上的某些功能有额外的要求。
例如,Windows平台上的DLL文件中的函数通常使用__declspec(dllexport)修饰符,但是当用户的项目中包含相同的头时,他们需要使用__declspec(dllimport)。 为此目的使用预处理器宏意味着他们可以在所有相关函数上使用该宏,并且在编译自己的DLL或用户DLL时简单地定义宏,并且在__declspec不相关的平台上可以将其定义为空。 像这样的宏还有很多其他原因。
在这种特殊情况下,您可以有效地假装宏为空并完全忽略它。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.