目标是在调用如下函数时将常量数组(表示相应结构参数的成员变量)(如{{"network", "lan"}, {"dhcp", "true"}}
)作为参数传递:
ubus_call("router", "client", {{"network", "lan"}, {"dhcp", "true"}}, 2);
我尝试了以下代码,但它在编译中返回错误:
struct ubus_args {
char *key;
char *val;
};
int ubus_call(char *obj, char *method, struct ubus_args u_args[], int size_args) {
printf("%s\n", obj);
printf("%s\n", method);
printf("%s %s\n", u_args->key, u_args->val);
return 0;
}
int main ()
{
ubus_call("router", "client", {{"network", "lan"}, {"dhcp", "true"}}, 2);
return 0;
}
我怎么能以正确的方式做到这一点?
答案 0 :(得分:9)
这是完整的程序,你可以尝试一下。
#include <stdio.h>
struct ubus_args {
char *key;
char *val;
};
int ubus_call(char *obj, char *method, struct ubus_args u_args[], int size_args) {
printf("%s\n", obj);
printf("%s\n", method);
printf("%s %s\n", u_args[0].key, u_args[0].val);
printf("%s %s\n", u_args[1].key, u_args[1].val);
return 0;
}
int main ()
{
ubus_call("router", "client", (struct ubus_args[2]){{"network", "lan"}, {"dhcp", "true"}}, 2);
return 0;
}
该程序在GNU GCC v4.8.3
在线编译器上进行测试。
答案 1 :(得分:7)
如果您配备了C99
及以上支持的编译器,则可以使用compound literals完成工作。
您可以重写函数调用,如
ubus_call("router", "client", (struct ubus_args[]){{"network", "lan"}, {"dhcp", "true"}}, 2);
它会起作用。
顺便说一句,main()
的推荐签名是int main(void)
。