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

 

 


Tema destacado: Arreglado, de nuevo, el registro del warzone (wargame) de EHN


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Declarar una funcion en c
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Declarar una funcion en c  (Leído 3,168 veces)
fafafa01

Desconectado Desconectado

Mensajes: 82


Ver Perfil
Declarar una funcion en c
« en: 15 Septiembre 2017, 23:06 pm »

Leyendo el libro " el lenguaje de programacion c" en el cspitulo 8 sección 7 define una funcion y adentro declara una funcion.
Algo asi:
Código
  1. void malloc(unsigned n){//definicion de funcion
  2.    ...
  3.    Tipo *morecore(unsigned);//declaracion de funcion
  4.    ...
  5. }
  6.  

¿Es esto posible?¿cuando hay que usarlo?


En línea

AlbertoBSD
Programador y
Moderador Global
***
Desconectado Desconectado

Mensajes: 3.705


🏴 Libertad!!!!!


Ver Perfil WWW
Re: Declarar una funcion en c
« Respuesta #1 en: 15 Septiembre 2017, 23:54 pm »

Código
  1. #include<stdio.h>
  2.  
  3. void f1(int a) {
  4. printf("f1 %i\n",a);
  5. }
  6.  
  7. void f2(int a) {
  8. printf("f2 %i\n",a);
  9. }
  10.  
  11.  
  12. void f3(int a) {
  13. printf("f3 %i\n",a);
  14. }
  15.  
  16.  
  17. int main() {
  18. void (*fun_ptr)(int);
  19. fun_ptr = &f1;
  20. (*fun_ptr)(10);
  21. fun_ptr = &f2;
  22. (*fun_ptr)(100);
  23. fun_ptr = f3;
  24. (*fun_ptr)(1000);
  25. }
  26.  

Si es posible, es un apuntador a una funcion, y sirve para cambiar la referencua de una funcion a otra sin alterar el codigo, esto podria ser hecho dinamicamente en tiempo de ejecucion, solo he visto implementado a nivel de kernel.

Por ejemplo en lo que he visto para lo modulos de FreeBSD los archivo device

/dev/random /dev/null, /dev/zero

Son archivos que puede ser usado desde fopen para lectura y escritura.

Entonces cuando tu programas el modulo, le dices al sistema operativo cual es tu funcion de lectura, cual es la funcion de escritura. Entonces al momento  de cargarlos el sistema tiene algo como

Código:
moduloX.read = ....
moduloX.write = ....
moduloX.close = ....
moduloX.open = ....

Entonces cada que se le mande a abrir, cerrar, leer o escribir en el archivo el sistema ejecutara las funciones que tu especifiques despues del =



En línea

fafafa01

Desconectado Desconectado

Mensajes: 82


Ver Perfil
Re: Declarar una funcion en c
« Respuesta #2 en: 16 Septiembre 2017, 00:06 am »

Un puntero a funcion no seria esi:

Código
  1. Tipo (*morecore)(unsigned);
  2.  
En línea

AlbertoBSD
Programador y
Moderador Global
***
Desconectado Desconectado

Mensajes: 3.705


🏴 Libertad!!!!!


Ver Perfil WWW
Re: Declarar una funcion en c
« Respuesta #3 en: 16 Septiembre 2017, 01:43 am »

Es lo mismo, solo depende de los parametros que recibe orginalmente la funcion.

ve los ejemplos que te agrego

Código
  1. #include<stdio.h>
  2.  
  3.  
  4. void f1(int a,int b) {
  5. printf("f1 %i,%i\n",a,b);
  6. }
  7.  
  8. int main() {
  9. void (*fun_ptr)(int,int);
  10. fun_ptr = &f1;
  11. (*fun_ptr)(10,100);
  12. }
  13.  

void es el tipo, podria ser algun otro tipo creo.

Saludos
En línea

fafafa01

Desconectado Desconectado

Mensajes: 82


Ver Perfil
Re: Declarar una funcion en c
« Respuesta #4 en: 16 Septiembre 2017, 15:27 pm »

Creo que no es lo mismo:

Funcion que devuelve un puntero a tipo
Código
  1. Tipo *morecore(unsigned);
  2.  

Puntero a una funcion que devulve tipo
Código
  1. Tipo (*morecore)(unsigned);
  2.  

mi duda igual es si se puede declarar una funcion dentro de una definicon de otra funcion.
En línea

ivancea96


Desconectado Desconectado

Mensajes: 3.412


ASMático


Ver Perfil WWW
Re: Declarar una funcion en c
« Respuesta #5 en: 16 Septiembre 2017, 16:13 pm »

Si hablamos de punteros a función, sin duda puedes.
Si hablamos de declarar el prototipo de una función dentro de tora, puedes, pero no es una buena práctica. Esos prototipos es mejor moverlos a un archivo de cabecera o ponerlos globales por pura facilidad para el programador.

Pero ser, es posible.
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
¿como declarar un iterable en una funcion en SQL?
Desarrollo Web
fallout20xx 0 1,697 Último mensaje 31 Enero 2012, 18:42 pm
por fallout20xx
¿Declarar variables en PHP?
PHP
dimitrix 2 2,351 Último mensaje 25 Mayo 2012, 04:51 am
por #!drvy
Problema con funciones en c++. No se como declarar la siguiente funcion
Programación C/C++
JCMARTZ 1 1,777 Último mensaje 7 Noviembre 2014, 00:36 am
por someRandomCode
declarar el prototipo de una función adentro del bloque main (explicitamente)
Programación C/C++
fafafa01 7 3,471 Último mensaje 17 Diciembre 2016, 04:44 am
por do-while
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines