gpt4 book ai didi

c - 需要帮助破译 C 语法

转载 作者:太空宇宙 更新时间:2023-11-04 01:17:58 24 4
gpt4 key购买 nike

我在大学里用 C 开发过几个项目,但从未在专业领域使用过它。

最近我开始阅读 cpython 的源代码,但以下语法让我感到困惑:github

PyAPI_FUNC(int) PyToken_OneChar(int); 函数名前的部分是什么意思?是动态构造返回类型的包装函数吗?

在这种情况下,我什至不确定要用 Google 搜索什么!

最佳答案

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 作为参数并返回 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 - 需要帮助破译 C 语法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52600551/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com