Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: sesiopower en 23 Marzo 2014, 02:17 am



Título: funciones en c
Publicado por: sesiopower en 23 Marzo 2014, 02:17 am
hola tengo una duda sobre las funciones.
yo tengo una funcion llamada mifuncion() que devuekve -1 en caso de producirse un error.
mi duda: yo hago la siguiente asignacion:
   if(mifuncion() == -1){
      perror("Error");
   }

¿estaría bien el código o habria que asignarle previamente el valor devuelto por la funcion a una variable?:
     if((variable=mifuncion()) == -1){
        perror("Error");
     }

yo creo que con la primera opcion seria suficiente para saber si en la funcion se produce error.

¿alguien me aclara la duda?


Título: Re: funciones en c
Publicado por: amchacon en 23 Marzo 2014, 02:34 am
Ambas opciones son correctas.


Título: Re: funciones en c
Publicado por: leosansan en 24 Marzo 2014, 08:35 am
hola tengo una duda sobre las funciones.
yo tengo una funcion llamada mifuncion() que devuekve -1 en caso de producirse un error.
mi duda: yo hago la siguiente asignacion:
   if(mifuncion() == -1){
      perror("Error");
   }

¿estaría bien el código o habría que asignarle previamente el valor devuelto por la función a una variable?:
if((variable=mifuncion()) == -1){
  perror("Error");
}

yo creo que con la primera opción seria suficiente para saber si en la función se produce error.

¿alguien me aclara la duda?

Sí, la primera sería suficiente, pero la segunda como la tienes parece una repetición de la primera. Supongo que lo que querías poner es:

Código
  1. variable=mifuncion();
  2. if((variable== -1){
  3.    perror("Error");
  4. }

¡¡¡¡ Saluditos! ..... !!!!


(http://st.forocoches.com/foro/images/smilies/aaaaa.gif)




Título: Re: funciones en c
Publicado por: rir3760 en 24 Marzo 2014, 17:55 pm
la segunda como la tienes parece una repetición de la primera. Supongo que lo que querías poner es:
Código
  1. variable = mifuncion();
  2. if (variable == -1){
  3.    perror("Error");
  4. }
La segunda forma de sesiopower y la que publicas son equivalentes. Se utilizan cuando el valor de retorno de una función (o el resultado de alguna otra expresión) debe utilizarse posteriormente.

Un ejemplo común sucede con la función getchar. Por ejemplo si se deben procesar todos los caracteres de la entrada estándar contando su numero de lineas:
Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. int main(void)
  5. {
  6.   int ch;
  7.   int nl; /* numero de lineas */
  8.  
  9.   nl = 0;
  10.   while ((ch = getchar()) != EOF)
  11.      if (ch == '\n')
  12.         nl++;
  13.  
  14.   printf("%d\n", nl);
  15.  
  16.   return EXIT_SUCCESS;
  17. }
En el ejemplo se debe almacenar en una variable el resultado de getchar ya que de no hacerlo no podríamos comparar este con '\n' (para contar el numero de lineas).

Un saludo