奇怪的c函数语法

时间:2013-04-15 06:33:51

标签: c linux windows syntax

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

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

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

1 个答案:

答案 0 :(得分: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帖子中What is __declspec and when do I need to use it?

请参阅Alexander Gessler answer

  

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

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


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

__declspec(..)只是将微软的具体内容包括在内   实现兼容性,通常用宏来包装它)