Funções embutidas
A palavra-chave inline
é um especificador de função que informa ao compilador que é preciso substituir o código na definição de função para cada instância de uma chamada de função.
Comentários
A substituição do código embutido ocorre apenas ao critério do compilador. Por exemplo, o compilador não vai embutir uma função se seu endereço já estiver em uso ou se for muito grande para embutir. Quando o compilador não embute uma função definida em um arquivo de cabeçalho, ele é marcado para o vinculador a fim de evitar violações de ODR (regra de uma definição).
Para que uma função seja considerada como candidata para embutir, ela deve usar a definição de função de novo estilo com uma assinatura que declare o tipo de retorno e outros tipos de parâmetro.
Use esse formato para especificar uma função embutida:
inline
function-definition
As funções embutidas geram códigos mais rápidos e, às vezes, menor do que a chamada de função equivalente:
As funções embutidas economizam o tempo necessário para preparar a pilha para argumentos e um valor retornado e o tempo para executar o salto e o retorno de uma chamada de função.
Mesmo quando repetidas diversas vezes, as funções embutidas pequenas, talvez três linhas ou menos, criam menos código do que a chamada de função equivalente porque o compilador não gera código para manipular argumentos e um valor retornado.
O compilador pode otimizar as funções geradas embutidas de maneiras que não estão disponíveis para funções normais. O compilador geralmente não executa otimizações entre procedimentos diferentes.
Não confunda as funções que usam inline
com o código do assembler embutido. Para obter mais informações sobre o assembler embutido, confira Assembler embutido.
Específico da Microsoft
A Microsoft também dá suporte às palavras-chave __inline
e __forceinline
para informar ao compilador que é preciso substituir o código na definição de função para cada instância de uma chamada de função. A palavra-chave __inline
é um sinônimo para inline
. A palavra-chave __forceinline
informa ao compilador que é preciso relaxar a heurística que determina se a função deve ser embutida, embora não garanta que uma função seja embutida.
Para compatibilidade com versões anteriores, _inline
e _forceinline
são sinônimos para __inline
e __forceinline
, respectivamente, a menos que a opção do compilador /Za
(Desabilitar extensões de linguagem) esteja especificada.
Fim da seção específica da Microsoft