我正在创建一个 Apache2 模块并遇到一个奇怪的编译问题。这是我用于解析名为“ analytics_ip ”的配置命令的函数原型:
static const char *apr_cfg_set_analytics_ip(cmd_parms *cmd, void *config, const char *data);
这是包含指向此函数的指针的command_rec结构数组:
static const command_rec apr_cmds[] =
{
AP_INIT_TAKE1("analytics_ip", apr_cfg_set_analytics_ip, NULL, OR_ALL, ""),
{ NULL }
};
结构 command_rec 在头文件http_config.h中声明
typedef struct command_struct command_rec;
struct command_struct {
/** Name of this command */
const char *name;
/** The function to be called when this directive is parsed */
cmd_func func;
/** Extra data, for functions which implement multiple commands... */
void *cmd_data;
/** What overrides need to be allowed to enable this command. */
int req_override;
/** What the command expects as arguments */
enum cmd_how args_how;
/** 'usage' message, in case of syntax errors */
const char *errmsg;
};
当我关注cmd_func时,它会得到以下声明:
typedef const char *(*cmd_func) ();
如果我没记错的话,这意味着“指向函数的指针返回指向 char 的指针并且不接受任何参数”。这怎么可能?命令解析函数必须接受至少一个参数,该参数包含与该函数对应的配置变量的模块值。
我正在使用 g++ 来编译这个模块。错误信息:
mod_xxx.h:65:2: error: invalid conversion from ‘const char* (*)(cmd_parms*, void*, const char*) {aka const char* (*)(cmd_parms_struct*, void*, const char*)}’ to ‘cmd_func {aka const char* (*)()}’ [-fpermissive]
};
提前致谢