elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Los 10 CVE más críticos (peligrosos) de 2020


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  [Solucionado] Pasar una función como parámetro en C.
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] 2 Ir Abajo Respuesta Imprimir
Autor Tema: [Solucionado] Pasar una función como parámetro en C.  (Leído 11,426 veces)
NOB2014


Desconectado Desconectado

Mensajes: 366



Ver Perfil
[Solucionado] Pasar una función como parámetro en C.
« en: 24 Septiembre 2016, 21:41 pm »

Hola, que tengan un muy buen día.
En mi post anterior utilice este tipo de llamada a función y todo correcto, pero ahora no logro que funcione, reconozco que si leyera en inglés tal vez podría saber el porqué del error pero recién estoy comenzando con el idioma. -

Código
  1. #include <stdio.h>
  2.  
  3. void uno( );
  4. void dos( );
  5.  
  6.  
  7. int main(void){
  8.  
  9. uno( dos() );
  10.  
  11. return 0;
  12. }
  13.  
  14. void uno(  ){
  15. printf( "\n Uno " );
  16. }
  17.  
  18. void dos(  ){
  19. printf( "\n dos" );
  20. }
  21.  

Saludos y desde ya muchas gracias. -


« Última modificación: 25 Septiembre 2016, 18:00 pm por NOB2014 » En línea

abraza las cosas y personas malas como si fueran tu mas preciada joya,Son tus mas grandes maestros de paciencia sabiduría y amor y cuando lo abrazas dejan de causar dolor.-
Arturo400

Desconectado Desconectado

Mensajes: 6


Ver Perfil
Re: Llamas a función y pasar como argumento otra llamada a función [C]
« Respuesta #1 en: 24 Septiembre 2016, 21:45 pm »

En la linea 9 cuando llamas a la funcion 2 es sin parentesis
Quedaria uno(dos);
Tene en cuenta que a la funcion uno le estas pasando como parametro algo, y ese parametro va sin corchetes ni parentesis en el llamado.


En línea

NOB2014


Desconectado Desconectado

Mensajes: 366



Ver Perfil
Re: Llamas a función y pasar como argumento otra llamada a función [C]
« Respuesta #2 en: 24 Septiembre 2016, 22:31 pm »

Hola, Arturo400. -
Si bien no me da error sólo imprime Uno y no Uno y dos.

« Última modificación: 25 Septiembre 2016, 00:09 am por NOB2014 » En línea

abraza las cosas y personas malas como si fueran tu mas preciada joya,Son tus mas grandes maestros de paciencia sabiduría y amor y cuando lo abrazas dejan de causar dolor.-
MCKSys Argentina
Moderador Global
***
Desconectado Desconectado

Mensajes: 5.471


Diviértete crackeando, que para eso estamos!


Ver Perfil
Re: Llamas a función y pasar como argumento otra llamada a función [C]
« Respuesta #3 en: 24 Septiembre 2016, 22:42 pm »

Hola!

No sé mucho de C++, pero creo que estás confundiendo las cosas:

Tu primer post dice que quieres pasar una función como parámetro. Para hacerlo, debes seguir lo que te dijo Arturo400.

Ahora, tu último post dice que la función que pasas como parámetro, no se ejecuta. Lo cual es lógico pues cuando la pasas como parámetro, lo que haces es pasar la dirección de memoria de donde está dicha función, no ejecutarla.

En tu ejemplo, si quieres ejecutar la función dos (que pasas como parametro), deberás modificar el codigo de uno, para que se llame la funcion pasada.

Encontré éste post que puede ayudarte (si, está en inglés.)

Saludos!
En línea

MCKSys Argentina

"Si piensas que algo está bien sólo porque todo el mundo lo cree, no estás pensando."

dato000


Desconectado Desconectado

Mensajes: 3.034



Ver Perfil
Re: Llamas a función y pasar como argumento otra llamada a función [C]
« Respuesta #4 en: 25 Septiembre 2016, 02:08 am »

Esta mal declarada la función uno, la cuál debe declararse con una estructura que reciba una función vacia como parametro ( dos() ) y así ejecutar ese metodo que se necesita.

Código
  1. #include <stdio.h>
  2.  
  3. void uno( void ()  );
  4. void dos( );
  5.  
  6.  
  7. int main(void){
  8.  
  9. uno( dos );
  10.  
  11. return 0;
  12. }
  13.  
  14. void uno( void funcionDos() ){
  15. printf( "\n Uno " );
  16. }
  17.  
  18. void dos(  ){
  19. printf( "\n dos" );
  20. }
  21.  

En lo personal este tipo de declaraciones en C son horrendas, pues al ser programación estructurada no es lo ideal en la forma de escribir código, es mejor usar funciones directas o virtuales para ejecutar este tipo de funciones, luego en C++ ya existe el encapsulamiento y declaraciones para ejecutar nuevas instancias de objetos, que facilitan mucho el desarrollo.

Supongo que será más un tema de aprendizaje, lo cuál viene bien.
En línea


MAFUS


Desconectado Desconectado

Mensajes: 1.603



Ver Perfil
Re: Llamas a función y pasar como argumento otra llamada a función [C]
« Respuesta #5 en: 25 Septiembre 2016, 02:13 am »

Uno es una función sin argumentos pero cuando la llamas le pasas la función dos, lo que C no se lo espera.

Esta técnica sirve cuándo una función pide un argumento, por ejemplo un entero, ahí puedes llamar una función que devuelva un entero. Ésta última se evalúa y el valor que retorna es el que usará la primera función.

Por ejemplo
Código
  1. int a() {
  2.    return 3;
  3. }
  4.  
  5. void b(int num) {
  6.    printf("num = %d", num);
  7. }
  8.  
  9. // ...
  10. // Llamada a b pasando a como argumento
  11. b(a());
  12.  
En línea

NOB2014


Desconectado Desconectado

Mensajes: 366



Ver Perfil
Re: Llamas a función y pasar como argumento otra llamada a función [C]
« Respuesta #6 en: 25 Septiembre 2016, 02:41 am »

Hola a todos.
MCKSys Argentina, gracias por la página que me apuntaste, pero todavía no si es lo que busco. -
dato000 me resulta lo mismo que antes, compila perfecto, pero me imprime solamente Uno. -

Saludos.
En línea

abraza las cosas y personas malas como si fueran tu mas preciada joya,Son tus mas grandes maestros de paciencia sabiduría y amor y cuando lo abrazas dejan de causar dolor.-
dato000


Desconectado Desconectado

Mensajes: 3.034



Ver Perfil
Re: Llamas a función y pasar como argumento otra llamada a función [C]
« Respuesta #7 en: 25 Septiembre 2016, 02:49 am »

Hola a todos.
MCKSys Argentina, gracias por la página que me apuntaste, pero todavía no si es lo que busco. -
dato000 me resulta lo mismo que antes, compila perfecto, pero me imprime solamente Uno. -

Saludos.

Pues eso es exactamente lo que hace, que querias que hiciera???
En línea


NOB2014


Desconectado Desconectado

Mensajes: 366



Ver Perfil
Re: Llamas a función y pasar como argumento otra llamada a función [C]
« Respuesta #8 en: 25 Septiembre 2016, 02:53 am »

Que me imprima "Uno" y en la línea siguiente "dos"
En línea

abraza las cosas y personas malas como si fueran tu mas preciada joya,Son tus mas grandes maestros de paciencia sabiduría y amor y cuando lo abrazas dejan de causar dolor.-
dato000


Desconectado Desconectado

Mensajes: 3.034



Ver Perfil
Re: Llamas a función y pasar como argumento otra llamada a función [C]
« Respuesta #9 en: 25 Septiembre 2016, 03:00 am »

Que me imprima "Uno" y en la línea siguiente "dos"

No se puede hacer de esa manera, lo mejor en ese caso seria:

Código
  1. #include <stdio.h>
  2.  
  3. void uno( void ()  );
  4. void dos( void () );
  5.  
  6.  
  7. int main(void){
  8.  
  9. uno( dos );
  10. dos( uno );
  11.  
  12. return 0;
  13. }
  14.  
  15. void uno( void funcionDos() ){
  16. printf( "\n Uno " );
  17. }
  18.  
  19. void dos( void funcionUno() ){
  20. printf( "\n dos" );
  21. }
  22.  

Eso es debido a que esas funciones no retornan ni toman argumentos, por lo que deben ser invocadas linealmente una y luego la otra para que se ejecuten.

En este caso, es lo mismo llamar a void uno() que void uno( void Dos), pues son funciones que solo imprimen un texto diseñado en tiempo de compilación y se muestra directamente al usuario sin tener ninguna clase de persistencia.
En línea


Páginas: [1] 2 Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines