Funções inline
Quando uma função é chamada, a execução do programa salta para o grupo de instruções constantes dessa função na memória. Encerrada a função, a execução do programa retorna para a linha de código seguinte àquela que chamou a função.
Esse trabalho de saltar para o conjunto de instruções onde se encontra definida a função e depois retornar para a linha de código seguinte à instrução chamadora à função denota um trabalho que ocupa certo espaço em memória, acarretando determinada quantidade de tempo para ser executada.
Para ganhar um pouco de tempo, podemos colocar a palavra-chave inline como primeira palavra do cabeçalho da definição de uma função, para que seja inserida uma cópia da função em todo lugar onde a mesma é chamada. Contudo esse procedimento só se justifica se a função chamada for muito pequena (uma ou duas linhas de instruções), pois nesses casos as instruções necessárias à chamada da função podem ocupar mais espaço na memória do que as instruções do seu próprio código.
Outro cuidado a ser tomado é que a definição (e não o protótipo apenas) da função deve anteceder à sua primeira chamada.
Não devemos esquecer que se uma função inline for chamada muitas vezes, a mesma quantia de vezes será realizada uma cópia de seu código no programa, o que poderá significar um aumento considerável no tamanho do executável.
O exemplo a seguir leva um Label no Form e é usado para devolver o valor da área de um retângulo:
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
inline int Area(int a, int b)
{
return(a * b);
}
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Label1Click(TObject *Sender)
{
int x, y;
x = StrToInt(InputBox("Cálculo da área", "entre com o valor de um lado", ""));
y = StrToInt(InputBox("Cálculo da área", "entre com o valor do outro lado", ""));
Label1->Caption = (String)"Área = " + Area(x, y);
}
//---------------------------------------------------------------------------
|
HOME || MAPA DO SITE || CURSOS || TUTORIAIS || LINKS || FORUM || CONTATO |