到目前为止,我知道我的 C。我正在查看我下载的 PHP 的源文件,我看到了这个奇怪的语法:
PHPAPI int php_printf(const char *format, ...)
{
// code...
}
PHPAPI
返回类型之前做什么int
?我已经尝试过搜索,但我无法理解这意味着什么。它是第二种返回类型吗?不可能是因为该函数确实返回了一个 int。也许它扩展到头文件中声明的其他结构?
转到makefile并添加编译源代码的行:-E
,通过这样做,您将在预处理阶段之后看到源代码。
在所有项目中搜索PHPAPI
:
在php.h中找到它:
#ifdef PHP_WIN32
#include "win95nt.h"
# ifdef PHP_EXPORTS
# define PHPAPI __declspec(dllexport)
# else
# define PHPAPI __declspec(dllimport)
# endif
#define PHP_DIR_SEPARATOR '\\'
#else
#define PHPAPI
#define THREAD_LS
#define PHP_DIR_SEPARATOR '/'
#endif
现在你需要知道的是什么是什么__declspec(dllexport)
,什么是__declspec(dllimport)
在 SO 线程中 - 什么是 __declspec 以及何时需要使用它?
典型的例子是
__declspec(dllimport)
and__declspec(dllexport)
,它指示链接器从 DLL 导入和导出(分别)符号。// header __declspec(dllimport) void foo(); // code - this calls foo() somewhere in a DLL foo();
(
__declspec(..)
只是包装了微软的特定东西——为了实现兼容性,通常会用宏把它包装起来)