Test Foro de elhacker.net SMF 2.1

Programación => Programación C/C++ => Mensaje iniciado por: MAFUS en 22 Diciembre 2015, 21:48 PM

Título: [C] Argumentos anónimos en llamadas a funciones
Publicado por: MAFUS en 22 Diciembre 2015, 21:48 PM
Muy buenas.

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:

void func(char* str[]) {
    int i = 0;
    while(str[i][0] != '\0')
        printf("%s\n", str[i++]);
}


Ante esto uno piensa que para llamar a dicha función debe crear una variable de esta forma
char *lista[] = {"uno", "dos", "tres", "cuatro", "");
y después llamar a la función
func(lista);

Pues se puede llamar a la función pasando un argumento anónimo, la lista entera directamente, de esta forma
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:
#include <stdio.h>

void func(char* str[]) {
    int i = 0;
    while(str[i][0] != '\0')
    printf("%s\n", a[i++]);
}

int main()
{
    func((char*[]){"uno", "dos", "tres", "cuatro", ""});
    return 0;
}


Ya me diréis que os parece  ;)
Título: Re: [C] Argumentos anónimos en llamadas a funciones
Publicado por: ivancea96 en 22 Diciembre 2015, 22:08 PM
Bueno, extraño extraño no es xD
Si:
char* str[] = {"a"};
no es extraño, el otro tampoco: Se está aplicando la misma conversión.
Título: Re: [C] Argumentos anónimos en llamadas a funciones
Publicado por: MAFUS en 22 Diciembre 2015, 22:25 PM
Cierto, es una conversión. Pero decía de que es extraño porque no se suele ver esta forma de llamar a una función directamente con los datos, siempre se suelen preparar antes en una variable.
Título: Re: [C] Argumentos anónimos en llamadas a funciones
Publicado por: fary en 23 Diciembre 2015, 15:12 PM
No se suele llamar así porque muy rara vez vas a trabajar con datos estáticos  :laugh:

Ademas de que hacer eso no es que sea mas lioso o extraño, es que cuesta hasta mas escribir y leer el código.
Título: Re: [C] Argumentos anónimos en llamadas a funciones
Publicado por: 0xFer en 23 Diciembre 2015, 17:26 PM
Mira los códigos del IOCCC son códigos verdaderamente extraños: http://www.ioccc.org/years.html

Un saludo