Foro de elhacker.net

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:

Código
  1. void func(char* str[]) {
  2.    int i = 0;
  3.    while(str[i][0] != '\0')
  4.        printf("%s\n", str[i++]);
  5. }

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

Pues se puede llamar a la función pasando un argumento anónimo, la lista entera directamente, de esta forma
Código
  1. 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
  1. #include <stdio.h>
  2.  
  3. void func(char* str[]) {
  4.    int i = 0;
  5.    while(str[i][0] != '\0')
  6.    printf("%s\n", a[i++]);
  7. }
  8.  
  9. int main()
  10. {
  11.    func((char*[]){"uno", "dos", "tres", "cuatro", ""});
  12.    return 0;
  13. }

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:
Código
  1. 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