Autor
|
Tema: [Solucionado] Pasar una función como parámetro en C. (Leído 12,800 veces)
|
NOB2014
Desconectado
Mensajes: 366
|
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. - #include <stdio.h> void uno( ); void dos( ); int main(void){ uno( dos() ); return 0; } void uno( ){ } void dos( ){ }
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
Mensajes: 6
|
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
Mensajes: 366
|
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
|
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
Mensajes: 3.034
|
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. #include <stdio.h> void uno( void () ); void dos( ); int main(void){ uno( dos ); return 0; } void uno( void funcionDos() ){ } void dos( ){ }
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
Mensajes: 1.603
|
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 int a() { return 3; } void b(int num) { } // ... // Llamada a b pasando a como argumento b(a());
|
|
|
En línea
|
|
|
|
NOB2014
Desconectado
Mensajes: 366
|
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
Mensajes: 3.034
|
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
Mensajes: 366
|
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
Mensajes: 3.034
|
Que me imprima "Uno" y en la línea siguiente "dos"
No se puede hacer de esa manera, lo mejor en ese caso seria: #include <stdio.h> void uno( void () ); void dos( void () ); int main(void){ uno( dos ); dos( uno ); return 0; } void uno( void funcionDos() ){ } void dos( void funcionUno() ){ }
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
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
[SOLUCIONADO] Pasar array como parámetro.
Java
|
NetJava
|
3
|
23,250
|
15 Febrero 2011, 21:55 pm
por Debci
|
|
|
Problema al pasar funcion como parametro a un inicializador de clase [C++][ok]
Programación C/C++
|
<[(x)]>
|
7
|
7,379
|
17 Abril 2012, 05:30 am
por <[(x)]>
|
|
|
Se puede pasar el campo de una estructura como parametro de funcion? es urgente
Programación C/C++
|
mariaorlando0922
|
1
|
3,294
|
25 Febrero 2013, 19:20 pm
por x64core
|
|
|
Pasar nombre de funcion como parametro de otra funcion en java
Java
|
xGisKaRDx
|
3
|
10,324
|
1 Agosto 2014, 23:27 pm
por jhonatanAsm
|
|
|
[C] Pasar Array como parámetro a funcion INT o FLOAT
Programación C/C++
|
n-utz
|
4
|
3,356
|
8 Agosto 2016, 00:47 am
por n-utz
|
|