需要帮助破译 C 语法
Need help deciphering C syntax
我在大学里用 C 开发过几个项目,但从未在专业领域使用过它。
最近我开始阅读 cpython 的源代码,但以下语法让我感到困惑:github
PyAPI_FUNC(int) PyToken_OneChar(int);
函数名前的部分是什么意思?是动态构造return类型的包装函数吗?
在这种情况下,我什至不确定 Google 搜索什么!
这是他们编写的 C 宏,允许他们在不同的 OS 平台上做不同的事情,例如,在 windows 上,这会将函数导出为 [=14= 的一部分] DLL 接口。
PyAPI_FUNC() 是在pyport.h 中定义的宏。具体定义取决于您构建的平台,但这里有一个示例:
#define PyAPI_FUNC(RTYPE) __declspec(dllimport) RTYPE
因此您问题中的行 PyAPI_FUNC(int) PyToken_OneChar(int);
扩展为:
__declspec(dllimport) int PyToken_OneChar(int);
基本上,它只是将名称 PyToken_OneChar
声明为一个以 int
作为其参数且 returns 为 int
的函数,但它在一个让编译器将存储信息嵌入这些类型的方式。如果您有兴趣,请参阅 What is __declspec and when do I need to use it? 了解有关 __declspec
指令的更多信息。 PyAPI_FUNC
的另一个定义是:
#define PyAPI_FUNC(RTYPE) RTYPE
它跳过了所有这些,只是将上面的行扩展为:
int PyToken_OneChar(int);
所以最主要的一点是,要在多个平台上编译的源代码通常使用宏,这样可以更轻松地编写一次代码并在每个平台上使用它。在这种情况下,它允许程序员为 PyToken_OneChar()
和许多其他函数编写一次声明,而不必为每个平台编写(和维护!)不同的版本。这是相当高级的内容 -- 如果您刚开始,则无需担心。
我在大学里用 C 开发过几个项目,但从未在专业领域使用过它。
最近我开始阅读 cpython 的源代码,但以下语法让我感到困惑:github
PyAPI_FUNC(int) PyToken_OneChar(int);
函数名前的部分是什么意思?是动态构造return类型的包装函数吗?
在这种情况下,我什至不确定 Google 搜索什么!
这是他们编写的 C 宏,允许他们在不同的 OS 平台上做不同的事情,例如,在 windows 上,这会将函数导出为 [=14= 的一部分] DLL 接口。
PyAPI_FUNC() 是在pyport.h 中定义的宏。具体定义取决于您构建的平台,但这里有一个示例:
#define PyAPI_FUNC(RTYPE) __declspec(dllimport) RTYPE
因此您问题中的行 PyAPI_FUNC(int) PyToken_OneChar(int);
扩展为:
__declspec(dllimport) int PyToken_OneChar(int);
基本上,它只是将名称 PyToken_OneChar
声明为一个以 int
作为其参数且 returns 为 int
的函数,但它在一个让编译器将存储信息嵌入这些类型的方式。如果您有兴趣,请参阅 What is __declspec and when do I need to use it? 了解有关 __declspec
指令的更多信息。 PyAPI_FUNC
的另一个定义是:
#define PyAPI_FUNC(RTYPE) RTYPE
它跳过了所有这些,只是将上面的行扩展为:
int PyToken_OneChar(int);
所以最主要的一点是,要在多个平台上编译的源代码通常使用宏,这样可以更轻松地编写一次代码并在每个平台上使用它。在这种情况下,它允许程序员为 PyToken_OneChar()
和许多其他函数编写一次声明,而不必为每个平台编写(和维护!)不同的版本。这是相当高级的内容 -- 如果您刚开始,则无需担心。