Pues sigo con mi cruzada de autodescubrimiento de gramáticas extrañas que C acepta.
Supongamos la siguiente función que acepta un array de cadenas y las va imprimiendo hasta encontrar una cadena vacía:
Código
void func(char* str[]) { int i = 0; while(str[i][0] != '\0') }
Ante esto uno piensa que para llamar a dicha función debe crear una variable de esta forma
Código
y después llamar a la función
char *lista[] = {"uno", "dos", "tres", "cuatro", "");
Código
func(lista);
Pues se puede llamar a la función pasando un argumento anónimo, la lista entera directamente, de esta forma
Código
func((char*[]){"uno", "dos", "tres", "cuatro", ""});
Obviamente, como siempre, esto se puede modificar al gusto y necesidades de cada uno.
Un programa de prueba completo es este:
Código
#include <stdio.h> void func(char* str[]) { int i = 0; while(str[i][0] != '\0') } int main() { func((char*[]){"uno", "dos", "tres", "cuatro", ""}); return 0; }
Ya me diréis que os parece