Ir al contenido principal

C: Funciones inline...

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.


Comentarios

Entradas populares de este blog

C: Conversiones de tipo (casting) en C...

El casting o simplemente cast  nos permite hacer una conversión explícita de un tipo de dato a otro, a criterio del programador siempre y cuando estos tipos sean compatibles. Este cast se realiza a través de un operador de conversión de tipos (type casting operator) y es un recurso a tener en cuenta ya que hay situaciones en que nos puede resultar de gran utilidad. Hacer uso de un cast es tan sencillo como poner (tipo de dato)  delante de la expresión o variable a convertir. Veamos un ejemplo: Declaramos una variable de tipo int con un identificador tan creativo como "a" y le realizamos diferentes cast a a para mostrarlo como si fuera un float, un double y un char en un printf. Lo que obtendríamos en pantalla sería lo siguiente: Donde tenemos el valor de nuestro a, a convertido en float y double (mostrándolo con 3 cifras decimales) y a convertido en char. Si vemos este último caso, al hacer la conversión de "a" a char toma a como el código ascii de...

C: Ejemplos: Congruencia de Zeller (nivel básico) ...

La Congruencia de Zeller es un algoritmo que se atribuye al matemático alemán Julius Christian Johannes Zeller que vivió en el siglo XIX. Este algoritmo nos permite determinar el día de la semana que le corresponde a una fecha determinada del calendario Gregoriano. La fórmula que nosotros usaremos (con algunas modificaciones respecto de la original para poder usarla en  informática) es la siguiente: Donde h es el día de la semana (entre 0 y 6), J es año/100 (la centuria) y K es año mod 100 (el año de la centuria). Y hay que tener en cuenta que los meses de enero y febrero cuentan como el mes 13 y 14 del año anterior. Ahora que tenemos la fórmula, programemos el algoritmo en C mediante el uso de una función: Analicemos el código paso a paso: Tenemos en cuenta el caso de enero y febrero: Dijimos que estos meses corresponden a los meses 13 y 14 del año anterior por lo que los asignamos como corresponde (mes + 12 , que dará 13 para enero y 14 para febrero) y le ...

Seguimos con lógica proposicional...

Anteriormente,  comenzamos  a explicar conceptos básicos del tema y analizar conectores lógicos a través de sus tablas de verdad. Entre esos conectores encontramos el condicional o implicación que denotamos de la forma:     p->q , donde p y q son proposiciones. Recordamos también que en  p->q  ,  p  recibe el nombre de "antecedente" y  q  de "consecuente". También se llama a  p  "hipótesis" y a  q  "tesis". Definida esta última, encontramos dos conceptos relacionados a ella: la recíproca y la contrarrecíproca. La  recíproca  de una implicación  p->q  se define como  q->p. Si comparamos la tabla de verdad de una implicación con su recíproca podemos ver que no es lo mismo decir  p->q  que decir  q->p  ya que no son expresiones  equivalentes , concepto que veremos más adelante. Mientras que la contrarrecíproca de una implicación  p->q  se d...