为什么C中函数定义有多种返回类型

Lit*_*Zha 4 c

我刚刚学习C语言,并且知道如何编写函数:

return_type function_name() {}
Run Code Online (Sandbox Code Playgroud)

定义时似乎只能写一种返回类型,但是我看到Win32 API和Android JNI中的一些样式也可以编译成功:

LRESULT CALLBACK WindowProc()
JNIEXPORT void JNICALL Java_ClassName_MethodName()
Run Code Online (Sandbox Code Playgroud)

我很困惑为什么它们有两种或三种返回类型。我搜索了一下,发现这些可能是修饰符,但我了解到的修饰符应该是static,,,那些关键词。longunsigned

ybu*_*ill 5

CALLBACKJNIEXPORTJNICALL不是类型;这些宏可以扩展为某些特定于平台的语言扩展,以声明函数的一些其他属性。

在本例中,CALLBACKJNICALL用于声明这些函数的调用约定。JNIEXPORT当使用动态链接时,将用于标记函数已导出(构建库时)或导入(链接到库时)。

这些细节对于为库提供稳定的 ABI(应用程序二进制接口)是必要的。然而,这些细节超出了 C 标准的范围。它们还取决于构建库的平台和配置。因此,库编写者求助于使用宏,根据代码编译的场景,扩展为适当的特定于平台的语法。