[C] Argumentos anónimos en llamadas a funciones

Iniciado por MAFUS, 22 Diciembre 2015, 21:48 PM

0 Miembros y 1 Visitante están viendo este tema.

MAFUS

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  ;)

ivancea96

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.

MAFUS

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.

fary

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.
Un byte a la izquierda.

0xFer

Mira los códigos del IOCCC son códigos verdaderamente extraños: http://www.ioccc.org/years.html

Un saludo
Código (java) [Seleccionar]
int getRandomNumber(){
    return 4; //chosen by fair dice roll
              //guaranteed to be random
}