3

到目前为止,我知道我的 C。我正在查看我下载的 PHP 的源文件,我看到了这个奇怪的语法:

PHPAPI int php_printf(const char *format, ...)
{
    // code...
}

PHPAPI返回类型之前做什么int?我已经尝试过搜索,但我无法理解这意味着什么。它是第二种返回类型吗?不可能是因为该函数确实返回了一个 int。也许它扩展到头文件中声明的其他结构?

4

1 回答 1

5

艰难的道路:

转到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 以及何时需要使用它?

Alexander Gessler 的回答

典型的例子是__declspec(dllimport)and __declspec(dllexport),它指示链接器从 DLL 导入和导出(分别)符号。

// header
__declspec(dllimport) void foo();


// code - this calls foo() somewhere in a DLL
foo();

__declspec(..)只是包装了微软的特定东西——为了实现兼容性,通常会用宏把它包装起来)

于 2013-04-15T06:45:29.500 回答