Brazilian Flag American Flag

Back Home Page

Published
Last modified

Funções Inline em C/C++

Em C/C++ é possível alterar a forma como funções são tratadas durante a compilação fazendo com que seu código possa ficar mais performático. Veja o que a palavra reservada inline pode fazer pelo seu código e suas funções.

As funções inline servem como códigos a serem copiados ao lugar que são chamados.

Funções normais quando são chamadas, o programa tem que ir até ela e executar seu código, isso leva uma certa fração de tempo para acontecer o que deixa o programa com uma resposta um pouco menor. Já as funções inline quando são chamadas o código já está lá, porque o compilador trata de copiar todo o código da função para o local onde ela está sendo chamada a partir do momento em que o código é compilado. Ou seja, se criarmos um código contendo uma função inline parecido com o abaixo:

inline void mensagem (){
  cout <<"Mensagem que irá aparecer na tela";
}

int main (void){
  mensagem ();
}

Quando o compilador compilar este código, ele se tornará apenas:

int main (void){
  cout <<"Mensagem que irá aparecer na tela";
}

Como se não existisse a função, mas todo seu código é copiado para a posição em que é chamado. Dessa forma o programa não terá que se deslocar até achar a função porque todo seu código já está escrito logo abaixo fazendo com que o tempo de resposta seja maior.

Para criar uma função inline basta fazer a mesma coisa fariamos para criar uma função normal, a única diferença e que antes de começarmos escrever a função deveremos utilizar a palavra reservada inline.

palavra-chave tipo de retorno nome da função parâmetros
inline void mensagem ( )

Em um código-fonte real seria:

#include <iostream>
#include <cstdlib>
using namespace std;

inline void mensagem (){
    cout <<"Hello, World!"<<endl;
}

int main (void){
    mensagem();
    system ("pause");
}

Mas o aumento de desempenho vem com um certo custo de espaço em memória. Queremos dizer que além de aumentar o desempenho, também aumenta o tamanho do arquivo. Por isso, funções inline não são tão utilizadas, ainda mais hoje em dia com computadores extremamente rápidos que conseguem chamar uma função em pouquíssimos milésimos de segundo.

Outra coisa importante a saber é que se colocarmos uma função inline de, por exemplo, 100 linhas de código dentro de uma iteração (repetição, loop) de 50 vezes, o próprio compilador não compilará este código, pois ele entende que será gerado um arquivo exageradamente grande com um custo de recursos do sistema desnecessário.

Para se ter uma idéia. Veja o código:

#include <iostream>
#include <cstdlib>
using namespace std;

inline void mensagem (){
    cout <<"Este programa foi iniciado com sucesso as ";
}

inline void horario (){
    system ("time/t");
}

inline void contador (int i){
    cout <<"Esta e a operacao de soma "<<i<<" de 10"<<endl;
    cout <<"iniciado as ";
}

inline int soma (){
    int a, b;
    cout <<"Digite o primeiro numero: ";
    cin >> a;
    cin.ignore();
    cout <<"Digite o segundo numero: ";
    cin >> b;
    cin.ignore();
    return a + b;
}

inline void resultado (int variavel){
    cout <<"O resultado e "<<variavel<<endl<<endl;
} 

inline void pausar (){
    system ("pause");
}

int main (void){
    int c, i;
    mensagem();
    horario ();
    for (i=1; i<=10; i++) {
        contador (i);
        horario();
        c=soma();
        resultado (c);
    }
    pausar ();
}

O código acima foi compilado no compilador Dev-C++ 4.9.9.2 sob o sistema operacional Windows XP SP2 com otimização de código para processadores Pentium.

O arquivo original, apenas com as funções inline, consumiu 476.305 bytes cerca de 465KB. O arquivo secundário com as mesma funções, mas sem a palavra chave INLINE, compilado nas mesmas condições que o anterior, consumiu 475.997 bytes cerca de 464KB (reduziu 0,01%). Parece pouco, mas temos que levar em conta que este programa tem apenas 40 linhas. Imagine um programa real que tenha vários módulos e milhares de linhas.


Creative Commons License
Funções Inline em C/C++ by Denys Xavier is licensed under a Creative Commons Attribution 4.0 International License.