奇怪的c函数语法

NON*_*ONE 3 c linux windows syntax

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

PHPAPI int php_printf(const char *format, ...)
{
    // code...
}
Run Code Online (Sandbox Code Playgroud)

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

0x9*_*x90 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
Run Code Online (Sandbox Code Playgroud)

现在你需要知道的是什么是__declspec(dllexport)什么,什么是什么__declspec(dllimport)

在SO线程中 - 什么是__declspec以及何时需要使用它?

亚历山大盖斯勒回答:

规范示例是__declspec(dllimport)__declspec(dllexport),它指示链接器(分别)从DLL导入和导出符号.

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


// code - this calls foo() somewhere in a DLL
foo();
Run Code Online (Sandbox Code Playgroud)

(__declspec(..)只是包装了Microsoft的特定内容 - 为了实现兼容性,人们通常会用宏来包装它)