El objetivo es pasar una matriz constante (que representa las variables miembro del parámetro de estructura correspondiente) como {{"network", "lan"}, {"dhcp", "true"}} como parámetro al llamar a una función como:
ubus_call("router", "client", {{"network", "lan"}, {"dhcp", "true"}}, 2);Probé el siguiente código pero devuelve errores en la compilación:
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; }¿Cómo puedo hacer eso de la manera adecuada?
Aquí está el programa completo, puedes probarlo.
#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; } El programa se prueba en el compilador en línea GNU GCC v4.8.3 .
Si está equipado con un compilador compatible con C99 y superior, puede usar literales compuestos para hacer su trabajo.
Puede reescribir la llamada de función como
ubus_call("router", "client", (struct ubus_args[]){{"network", "lan"}, {"dhcp", "true"}}, 2);y funcionará
Por cierto, la firma recomendada de main() es int main(void) .