En la entrada anterior hablamos acerca de las macros y desaconsejamos su uso por los problemas que pueden llegar a causar, pero aquí les traemos una alternativa mejor: las funciones inline.
¿Qué es una función inline?
Una función inline es como cualquier otra función sólo que al realizar el llamado a las mismas, si su cuerpo lo permite, se reemplaza el llamado por ese cuerpo al igual que ocurre con las macros. En caso de que el cuerpo de la función inline no lo permita, el compilador la tomará como cualquier otra función haciendo un llamado a la misma.
Las principales ventajas de éstas sobre las macros radican en el hecho de no tener que extremar tantos cuidados como con las macros en el uso de paréntesis cada vez que aparece un parámetro, además al ser funciones admiten la declaración de variables locales y características de las mismas como la recursión (que veremos próximamente).
Definiendo una función inline:
Para definir una función inline, lo haremos antes de la función main de la misma manera que hacíamos la definición de una función tradicional , pero anteponiendo la palabra inline.
Es decir que tendría esta estructura:
Llamado a la función inline:
Para llamar una de estas funciones lo haremos de la misma manera que a cualquier otra función, es decir que podemos asignar su resultado a una variable del mismo tipo que el tipo de retorno de la función, usarla en alguna estructura o, si es void, llamarla directamente.
Un ejemplo de función inline:
Para este ejemplo, haremos una función inline que haga lo mismo que hacía la macro CUBO(x) en el post anterior:
Si lo ejecutamos veremos que esta función no trae los mismos problemas que la macro ya que como cualquier función resuelve el 1+1 y trabaja directamente con el resultado.
Últimos detalles:
Hay que tener en cuenta que una función inline puede contener estructuras de control y ser tan larga o complicada como se desee a diferencia de las macros. En resumen: es igual a las funciones que ya conocemos, sólo que al colocar inline le decimos al compilador que podría reemplazar el llamado por el cuerpo de la misma, pero será el compilador el que tenga la última palabra y evalúe si esto es posible o si tomará el llamado como el de una función común y corriente.
¿Qué es una función inline?
Una función inline es como cualquier otra función sólo que al realizar el llamado a las mismas, si su cuerpo lo permite, se reemplaza el llamado por ese cuerpo al igual que ocurre con las macros. En caso de que el cuerpo de la función inline no lo permita, el compilador la tomará como cualquier otra función haciendo un llamado a la misma.
Las principales ventajas de éstas sobre las macros radican en el hecho de no tener que extremar tantos cuidados como con las macros en el uso de paréntesis cada vez que aparece un parámetro, además al ser funciones admiten la declaración de variables locales y características de las mismas como la recursión (que veremos próximamente).
Definiendo una función inline:
Para definir una función inline, lo haremos antes de la función main de la misma manera que hacíamos la definición de una función tradicional , pero anteponiendo la palabra inline.
Es decir que tendría esta estructura:
Llamado a la función inline:
Para llamar una de estas funciones lo haremos de la misma manera que a cualquier otra función, es decir que podemos asignar su resultado a una variable del mismo tipo que el tipo de retorno de la función, usarla en alguna estructura o, si es void, llamarla directamente.
Un ejemplo de función inline:
Para este ejemplo, haremos una función inline que haga lo mismo que hacía la macro CUBO(x) en el post anterior:
Si lo ejecutamos veremos que esta función no trae los mismos problemas que la macro ya que como cualquier función resuelve el 1+1 y trabaja directamente con el resultado.
Últimos detalles:
Hay que tener en cuenta que una función inline puede contener estructuras de control y ser tan larga o complicada como se desee a diferencia de las macros. En resumen: es igual a las funciones que ya conocemos, sólo que al colocar inline le decimos al compilador que podría reemplazar el llamado por el cuerpo de la misma, pero será el compilador el que tenga la última palabra y evalúe si esto es posible o si tomará el llamado como el de una función común y corriente.
Comentarios
Publicar un comentario