我在C
中有以下代码:
int main(int argc, char **argv) {
...
redisContext *c;
redisReply *reply;
...
outer_function(...)
return 0;
}
我想在Redis
中使用outer_function
变量。
我尝试为此在struct
之前添加一个main(...)
:
typedef struct {
redisReply reply;
redisContext c;
} redisStuff;
在main
中:
redisContext *c;
redisReply *reply;
redisStuff rs = { reply, c };
...
outer_function((u_char*)&rs, ...)
最后在我的outer_function
中:
void outer_function(u_char *args, ...) {
redisStuff *rs = (redisStuff *) args;
reply = redisCommand(c, "MY-REDIS-COMMAND");
...
return;
}
但是它失败了:
warning: incompatible pointer to integer conversion initializing 'int' with an expression of type 'redisReply *' (aka 'struct redisReply *')
答案 0 :(得分:3)
您的结构需要值,并且您正在传递指针,因此编译器无法将指针分配为redisContext
。
typedef struct {
redisReply reply; // <- expects value
redisContext c; // <- expects value
} redisStuff;
...
redisContext *c;
redisReply *reply;
redisStuff rs = { reply, c }; // <- reply and c are pointers
答案 1 :(得分:1)
void outer_function(redisContext *c, redisReply **reply) {
*reply = redisCommand(c, "MY-REDIS-COMMAND");
...
return;
}
int main(int argc, char **argv) {
...
redisContext *c;
redisReply *reply;
...
outer_function(c,&replay);
return 0;
}