Autor Tema: Parámetros Opcionales  (Leído 2479 veces)

0 Usuarios y 2 Visitantes están viendo este tema.

Desconectado PicMinor

  • PIC16
  • ***
  • Mensajes: 222
Parámetros Opcionales
« en: 12 de Febrero de 2013, 06:39:17 »
¡ Saludos al foro !

Una duda, ¿Se pueden crear funciones en CCS con parámetros opcionales?, es decir, funciones que puedan ser llamadas con uno, dos o ningún parámetro.

a=funcion();
b=funcion(1)
c=funcion(1,2);

Desconectado ppyote

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 929
Re: Parámetros Opcionales
« Respuesta #1 en: 12 de Febrero de 2013, 07:41:35 »
Sí, echale un ojo a las librerías que hay dentro de la carpeta drivers del ccs
PPyote... siempre estareis en mi corazon.... Te quiero Hermano...

Desconectado RedPic

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 5544
    • Picmania by Redraven
Re: Parámetros Opcionales
« Respuesta #2 en: 12 de Febrero de 2013, 09:21:35 »
Sí, echale un ojo a las librerías que hay dentro de la carpeta drivers del ccs

¿Algún ejemplo en concreto? porque nunca he utilizado en CSS funciones con número de parámetros variable  :shock:
Contra la estupidez los propios dioses luchan en vano. Schiller
Mi Güeb : Picmania

Desconectado ppyote

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 929
Re: Parámetros Opcionales
« Respuesta #3 en: 12 de Febrero de 2013, 09:55:39 »
Sí, echale un ojo a las librerías que hay dentro de la carpeta drivers del ccs

¿Algún ejemplo en concreto? porque nunca he utilizado en CSS funciones con número de parámetros variable  :shock:

ahora mismo no estoy en casa, pero los ejemplos de las memorias eeprom de la serie 24 o 25 creo que le valdrían
« Última modificación: 12 de Febrero de 2013, 10:32:32 por ppyote »
PPyote... siempre estareis en mi corazon.... Te quiero Hermano...

Desconectado MGLSOFT

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 7912
Re: Parámetros Opcionales
« Respuesta #4 en: 12 de Febrero de 2013, 13:18:49 »
Estan los parametros por defecto (que se cargan si en la llamada no se pasan parametros):

Citar
Default parameters allows a function to have default values if nothing is passed to it when called.

int mygetc(char *c, int n=100){

}

 

This function waits n milliseconds for a character over RS232. If a character is received, it saves it to the pointer c and returns TRUE. If there was a timeout it returns FALSE.

 

//gets a char, waits 100ms for timeout

mygetc(&c);

//gets a char, waits 200ms for a timeout

mygetc(&c, 200);

Y en el caso de multiples parametros variables, esto dice la ayuda...

Citar
The compiler supports a variable number of parameters. This works like the ANSI requirements except that it does not require at least one fixed parameter as ANSI does. The function can be passed any number of variables and any data types. The access functions are VA_START, VA_ARG, and VA_END. To view the number of arguments passed, the NARGS function can be used.

 

/*

stdarg.h holds the macros and va_list data type needed for variable number of parameters.

*/

#include <stdarg.h>

 

 

A function with variable number of parameters requires two things. First, it requires the ellipsis (...), which must be the last parameter of the function. The ellipsis represents the variable argument list. Second, it requires one more variable before the ellipsis (...). Usually you will use this variable as a method for determining how many variables have been pushed onto the ellipsis.

 

Here is a function that calculates and returns the sum of all variables:

int Sum(int count, ...)

{

   //a pointer to the argument list

   va_list al;

   int x, sum=0;

   //start the argument list

   //count is the first variable before the ellipsis

   va_start(al, count);

   while(count--) {

      //get an int from the list

      x = var_arg(al, int);

      sum += x;

   }

   //stop using the list

   va_end(al);

   return(sum);

}

 

 

Some examples of using this new function:

x=Sum(5, 10, 20, 30, 40, 50);

y=Sum(3, a, b, c);
Todos los dias aprendo algo nuevo, el ultimo día de mi vida aprenderé a morir....
Mi Abuelo.

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: Parámetros Opcionales
« Respuesta #5 en: 12 de Febrero de 2013, 15:29:16 »
Seria sobrecarga de funciones que CCS soporta (Es propiedad de C++  :roll: )

Código: C
  1. int mayor(int a, int b);
  2. int mayor(int a, int b, int c);
  3. int mayor(int a, int b, int c, int d);
  4.  
  5. int mayor(int a, int b) {
  6.    if(a > b) return a; else return b;
  7. }
  8.  
  9. int mayor(int a, int b, int c) {
  10.    return mayor(mayor(a, b), c);
  11. }
  12.  
  13. int mayor(int a, int b, int c, int d) {
  14.    return mayor(mayor(a, b), mayor(c, d));
  15. }
  16.  
  17.  
  18. void main()
  19. {
  20.  
  21.    mayor(10, 4);
  22.    mayor(15, 35, 23);
  23.    mayor(10, 12, 12, 18);
  24. }


Saludos!
No contesto mensajes privados, las consultas en el foro

Desconectado RedPic

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 5544
    • Picmania by Redraven
Re: Parámetros Opcionales
« Respuesta #6 en: 12 de Febrero de 2013, 16:16:36 »
Seria sobrecarga de funciones que CCS soporta (Es propiedad de C++  :roll: )

Si, si. La he utilizado en C Builder pero no sabía que CCS lo permitiese.  :oops:
Contra la estupidez los propios dioses luchan en vano. Schiller
Mi Güeb : Picmania

Desconectado RALF2

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 2060
Re: Parámetros Opcionales
« Respuesta #7 en: 12 de Febrero de 2013, 21:22:04 »
ya somos dos   :shock:

Como se aprende en este foro   :mrgreen:

Desconectado PalitroqueZ

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5474
    • Electrónica Didacta
Re: Parámetros Opcionales
« Respuesta #8 en: 12 de Febrero de 2013, 22:05:30 »
sobrecarga de funciones en ccs?!!!

¿y que utilidad podría tener si no se puede implementar la herencia?

La propiedad privada es la mayor garantía de libertad.
Friedrich August von Hayek

Desconectado BrunoF

  • Administrador
  • DsPIC30
  • *******
  • Mensajes: 3865
Re: Parámetros Opcionales
« Respuesta #9 en: 12 de Febrero de 2013, 22:10:15 »
sobrecarga de funciones en ccs?!!!

¿y que utilidad podría tener si no se puede implementar la herencia?



Es un muy buen punto. Pues no más que eso. Y el problema más importante y que lo hace poco útil es que no es un lenguaje orientado a objetos, por lo que no puedes dinámicamente sobrecargarla. Y de paso, la sobrecarga de funciones es una característica muy común en Lenguajes Orientados a Objetos, no sólo en C++.
« Última modificación: 12 de Febrero de 2013, 23:11:00 por BrunoF »
"All of the books in the world contain no more information than is broadcast as video in a single large American city in a single year. Not all bits have equal value."  -- Carl Sagan

Sólo responderé a mensajes personales, por asuntos personales. El resto de las consultas DEBEN ser escritas en el foro público. Gracias.

Desconectado PalitroqueZ

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5474
    • Electrónica Didacta
Re: Parámetros Opcionales
« Respuesta #10 en: 12 de Febrero de 2013, 22:12:11 »
a menos que el compilador (que no se como lo haría) adivine cuales lineas de código necesite usar dentro de esa misma función con diferentes parámetros, yo vería mas factible (en tamaño del código) reescribir la función.
La propiedad privada es la mayor garantía de libertad.
Friedrich August von Hayek

Desconectado PicMinor

  • PIC16
  • ***
  • Mensajes: 222
Re: Parámetros Opcionales
« Respuesta #11 en: 18 de Febrero de 2013, 09:53:06 »
¡ Gracias por las respuestas !

Utilizando la sobrecarga de funciones me ha funcionado como yo quería. Me queda la duda de asignar valores por defecto a los parámetros que no hemos pasado a la/las funciones. Lo he resuelto de una manera un poco cutre llamando desde una función a la otra con valores por defecto. Funcionar funciona pero no se si hay alguna manera más elegante. Lo que he hecho es:

int funcion(a,b);                                            // Función con dos parámetros
int funcion(a,b,c);                                          // Sobrecarga con tres parámetros

int funcion(a,b) {                                           // Llamada con dos parámetros
      return funcion(a, b, ValDefecto_c);            // Llama a la de tres con un valor por defecto para c
}


Gracias a todos!
« Última modificación: 18 de Febrero de 2013, 09:56:23 por PicMinor »


 

anything