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

Confira também

inline, __inline, __forceinline