为什么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/