为什么Apache来源具有:

#define AP_MODULE_DECLARE(type) type

使用这种形式的好处是什么:
AP_CORE_DECLARE(void) ap_add_per_dir_conf(server_rec *s, void *dir_config);`


void ap_add_per_dir_conf(server_rec *s, void *dir_config);

谢谢。

最佳答案

请注意,这些宏的其他定义也是可能的。 include / ap_config.h具有以下内容(我添加了一些缩进):

#if !defined(WIN32) || defined(AP_MODULE_DECLARE_STATIC)
...
#  if defined(WIN32)
#    define AP_MODULE_DECLARE(type)            type __stdcall
#  else
#    define AP_MODULE_DECLARE(type)            type
#  endif
...
#else
...
#  define AP_MODULE_DECLARE(type)          __declspec(dllexport) type __stdcall
...
#endif

在此,AP_MODULE_DECLARE用于添加__stdcall(指定特定的调用约定)和/或__declspec(dllexport)(与将函数导出为共享库的接口(interface)的一部分有关)。

请注意,例如如果定义了__declspec(dllexport),则不会添加AP_MODULE_DECLARE_STATIC。我的猜测(由于我对这段代码不熟悉,可能并不完全准确)是它与将模块链接为静态库有关,在这种情况下,__declspec(dllexport)毫无意义。

如果您想知道“dso”在该文件的注释中代表什么,它是针对动态共享对象的。它基本上是一个共享库,尽管Apache似乎保留了术语“共享库”,用于在运行时未使用dlopen(3)加载的内容。

关于c++ - C/C++中的'#define AP_MODULE_DECLARE(type)type',我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29109379/

10-11 00:27