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
, но делает это таким образом, что позволяет компилятору встраивать информацию о хранении в эти типы. См. Что такое __declspec и когда мне нужно его использовать? для получения дополнительной информации о __declspec
директива, если вы заинтересованы. Другое определение для PyAPI_FUNC
:
#define PyAPI_FUNC(RTYPE) RTYPE
который пропускает все это и просто расширяет строку выше до:
int PyToken_OneChar(int);
Таким образом, главное, что следует вынести из этого, это то, что исходный код, предназначенный для компиляции на нескольких платформах, часто использует макросы, упрощающие однократное написание кода и его использование на каждой из этих платформ. В этом случае это позволяет программистам писать объявления для PyToken_OneChar()
и многих других функций один раз вместо того, чтобы писать (и поддерживать!) разные версии для каждой платформы. Это довольно продвинутый материал — не то, о чем вам следует беспокоиться, если вы только начинаете.
person
Caleb
schedule
02.10.2018
#define
для него. - person Charles Srstka   schedule 02.10.2018pyapi_func
», я получаю набор полезных ссылок, таких как «Python-Dev — Что означают PyAPI_FUNC и PyAPI_DATA? — часть ветки электронной почты оPyAPI_FUNC
. По сути, вы выполняете поиск по термину, который сбивает с толку, и смотрите, что происходит. В этом случае, поскольку имя не является общим, оно содержит полезные данные. Если бы у вас в коде был макрос LIST, то ваш поиск был бы намного сложнее. Но попробовать простой поиск легко. - person Jonathan Leffler   schedule 02.10.2018