我在大学里做过几个关于 C 的项目,但从未以专业身份使用过它。
最近我开始通读 cpython 的源代码,下面的语法让我很困惑:github
什么是PyAPI_FUNC(int) PyToken_OneChar(int);函数名前的部分是什么意思?它是动态构造返回类型的包装函数吗?
在这种情况下,我什至不确定 Google 搜索什么!
PyAPI_FUNC() 是 pyport.h 中定义的宏。特定的定义取决于您正在构建的平台,但这里有一个示例:
#define PyAPI_FUNC(RTYPE) __declspec(dllimport) RTYPE
Run Code Online (Sandbox Code Playgroud)
因此,您问题中的这一行PyAPI_FUNC(int) PyToken_OneChar(int);扩展为:
__declspec(dllimport) int PyToken_OneChar(int);
Run Code Online (Sandbox Code Playgroud)
基本上,它只是将名称声明PyToken_OneChar为一个函数,该函数将 anint作为其参数并返回 an int,但它以一种让编译器将存储信息嵌入这些类型的方式来实现。请参阅什么是 __declspec 以及何时需要使用它?__declspec如果您有兴趣,可以了解有关该指令的更多信息。的另一个定义PyAPI_FUNC是:
#define PyAPI_FUNC(RTYPE) RTYPE
Run Code Online (Sandbox Code Playgroud)
它跳过了所有这些,只是将上面的行扩展为:
int PyToken_OneChar(int);
Run Code Online (Sandbox Code Playgroud)
因此,要摆脱的主要问题是,旨在在多个平台上编译的源代码通常使用宏,这些宏可以更轻松地编写一次代码并在每个平台上使用它。在这种情况下,它允许程序员为PyToken_OneChar()许多其他函数编写一次声明,而不必为每个平台编写(和维护!)不同的版本。这是相当高级的东西——如果你刚开始,你不需要担心。
| 归档时间: |
|
| 查看次数: |
353 次 |
| 最近记录: |