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

 

 


Tema destacado: (TUTORIAL) Aprende a emular Sentinel Dongle By Yapis


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  [?] funciones inline y returns
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: [?] funciones inline y returns  (Leído 3,670 veces)
oxydec

Desconectado Desconectado

Mensajes: 42



Ver Perfil
[?] funciones inline y returns
« en: 8 Abril 2011, 03:34 am »


Hola, tengo algunas dudas sobre el tema

Inline vs funciones normales :

¿Aparte de incrementar el tamaño del ejecutable tienen alguna otra desventaja frente a las funciones no-inline?

Si el tamaño del ejecutable no es un punto critico, ¿existe alguna razon para no declarar todas las funciones como inline?

tema returns:

Según tengo entendido las funciones inline se expanden mas o menos igual que una macro del preprocesador, entonces porque:

Código
  1. inline int sfdf(){ return 0;}
  2.  
  3. int main(){
  4.  int a = sfdf(); // ok
  5.  // no es lo mismo que:
  6.  int b = return 0; // peta
  7. }
  8.  
?

Corregidme si me equivoco pero el return supongo que lo que hace es poner el valor de retorno en la pila, asi que por ahi se pierde eficiencia no? Por lo tanto en aquellos casos en que sea posible y el tiempo de ejecucion un factor critico, seria mejor usar macros del preprocesador?


En línea

Akai


Desconectado Desconectado

Mensajes: 823



Ver Perfil
Re: [?] funciones inline y returns
« Respuesta #1 en: 8 Abril 2011, 08:45 am »

Tema ventajas:

Las funciones inline tienen la ventaja de no tener la sobrecarga de saltar a la función, apilar los argumentos, luego retornar, desapilar y volver a saltar a donde estábamos.

Como se podrá ver, para funciones cortas, esto supone una gran ventaja.

Código
  1. bool positivo(int i){
  2. return i>0;
  3. }

Código
  1. inline bool positivo2(int i){
  2. return i>0;
  3. }

la función positivo va a tardar posiblemente más en realizar todo el tema de apilado y return, que la comparación. El inline te salva eso.

Añado algo: Según las optimizaciones con las que compiles, funciones sin inline definidas e implementadas en el mismo lugar, pueden ser convertidas en inline.



Tema returns:

Las funciones inline, se expanden como si fuesen macros, si. PERO lo hacen de una forma oscura y "misteriosa"

Tu ejemplo del return, no es correcto por el hecho que return devuelve a la función superior a la actual, no en la que te encuentras.
Código
  1. b=sfdf();
Eso si sería correcto para obtener un 0 en b.

Como ya he dicho, las funciones inline se expanden de forma similar a las macros, PERO con mucha diferencia. En este tema comentaba eso:
http://foro.elhacker.net/programacion_cc/estoy_aprendiendo-t322048.0.html

Por otro lado, no tengo el conocimiento certero de como se expanden las funciones inline, pero una aproximación podria ser esta:
Código
  1. b=sfdf();
  2. //se traduce por -->
  3. {b=0}

Posiblemente los return se asignen dentro del código "empotrado" del inline a la variable que va a ser asignada. El código de la función, obviamente estará entre llaves.

Por otro lado, tenemos que pensar, que esto al fin y al cabo es trabajo del preprocesador, que simplemente traducirá esto a un código encerrado entre llaves (recordemos que esto crea el mismo tipo de ámbito de variables que en una función) en vez de una llamada a la misma.

De esta forma, el compilador, traducirá eso a código "llano" en vez de un salto a otra posición del código.



En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Array con returns?
Java
AlvaradoGunner 4 7,124 Último mensaje 24 Enero 2009, 07:07 am
por Ragnarok
Duda sobre funciones inline.
Programación C/C++
OmarHack 7 4,320 Último mensaje 28 Marzo 2013, 17:04 pm
por OmarHack
Duda con funciones inline.
Programación General
SARGE553413 0 1,699 Último mensaje 15 Julio 2014, 13:42 pm
por SARGE553413
¿Son las funciones inline, inline todo el tiempo?
Programación General
Usuario887 2 3,083 Último mensaje 1 Noviembre 2021, 17:46 pm
por Usuario887
Subquery returns more than 1 row
Bases de Datos
KateLibby 1 3,794 Último mensaje 31 Enero 2022, 13:04 pm
por KateLibby
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines