Diferença entre Inline e Macro em C ++

Autor: Laura McKinney
Data De Criação: 2 Abril 2021
Data De Atualização: 14 Poderia 2024
Anonim
Diferença entre Inline e Macro em C ++ - Tecnologia
Diferença entre Inline e Macro em C ++ - Tecnologia

Contente


Macro é uma instrução que se expande no momento de sua invocação. Funções também podem ser definidas, como macros. Da mesma forma, as funções embutidas também se expandem no ponto de sua chamada. Uma diferença principal entre as funções embutida e macro é que o funções embutidas são expandidos durante compilação, e as macros são expandidos quando o programa é processado pelo pré-processador.

Vamos estudar a diferença entre inline e macro com a ajuda do gráfico de comparação.

  1. Gráfico de comparação
  2. Definição
  3. Principais diferenças
  4. Conclusão

Gráfico de comparação

Base para ComparaçãoNa linhaMacro
Basic As funções embutidas são analisadas pelo compilador.As macros são expandidas pelo pré-processador.
Sintaxereturn_type inline nome_da_função (parâmetros) {. . . }#define macro_name char_sequence
Palavras-chave Usadasna linha
#definir
DefiniramPode ser definido dentro ou fora da classe.É sempre definido no início do programa.
AvaliaçãoEle avalia o argumento apenas uma vez.Ele avalia o argumento cada vez que é usado no código.
Expansão O compilador pode não incorporar e expandir todas as funções.As macros são sempre expandidas.
AutomaçãoAs funções curtas, definidas dentro da classe, são automaticamente criadas em funções embutidas.Macros devem ser definidas especificamente.
AcessandoUma função de membro embutido pode acessar os membros de dados da classe.Macros nunca podem ser os membros da classe e não podem acessar os membros de dados da classe.
TerminaçãoA definição da função embutida termina com os colchetes no final da função embutida.A definição de macro termina com a nova linha.
DepuraçãoA depuração é fácil para uma função embutida, pois a verificação de erros é feita durante a compilação.A depuração se torna difícil para macros, pois a verificação de erros não ocorre durante a compilação.
ObrigatórioUma função embutida vincula todas as instruções no corpo da função muito bem, pois o corpo da função inicia e termina com colchetes.Uma macro enfrenta o problema de ligação se tiver mais de uma instrução, pois não possui símbolo de terminação.


Definição de Inline

Uma função embutida parece uma função regular, mas é precedida pela palavra-chave "na linha". Funções embutidas são funções de tamanho curto que são expandidas no ponto de sua chamada, em vez de serem chamadas. Vamos entender as funções embutidas com um exemplo.

#incluir usando espaço para nome std; exemplo de classe {int a, b; public: inline void initialize (int x, int y) {a = x; b = y} void display () {cout << a << "" <

No programa acima, declarei e defini a função initialize (), como uma função embutida na classe "exemplo". O código da função initialization () será expandido onde é invocado pelo objeto da classe "exemplo". A função display (), definida no exemplo da classe, não é declarada inline, mas pode ser considerada inline pelo compilador, como em C ++, a função definida dentro da classe é automaticamente alinhada pelo compilador, considerando o tamanho da função.


  • A função embutida reduz a sobrecarga da chamada e do retorno da função, o que, por sua vez, reduz o tempo de execução do programa.Além disso, os argumentos são empurrados para a pilha e os registradores são salvos quando uma função é chamada e redefinida quando a função retorna, o que leva tempo, isso é evitado pelas funções em linha, pois não há necessidade de criar variáveis ​​locais e parâmetros formais a cada vez. .
  • As funções embutidas podem ser um membro da classe e também podem acessar o membro de dados da classe.
  • A função embutida reduz o tempo de execução do programa, mas, às vezes, se o comprimento da função embutida for maior, o tamanho do programa também aumentará devido ao código duplicado. Portanto, é uma boa prática alinhar funções muito pequenas.
  • O argumento da função embutida é avaliado apenas uma vez.

Definição de Macro

Macro é uma "diretiva de pré-processadores". Antes da compilação, o programa é examinado pelo pré-processador e, onde quer que encontre a macro no programa, ele substitui a macro por sua definição. Portanto, a macro é considerada como a "substituição". Vamos estudar macro com um exemplo.

#incluir #define MAIOR (a, b) ((a <b)? b: a) int main (vazio) {cout << "Maior de 10 e 20 é" << MAIOR ("20", "10") << " n"; retornar 0; }

No código acima, declarei uma função macro GREATER (), que compara e encontra o maior número de ambos os parâmetros. Você pode observar que não há ponto e vírgula para finalizar a macro, pois a macro é finalizada apenas pela nova linha. Como uma macro é apenas uma substituição, ela expandirá o código da macro onde é invocada.

  • As macros são sempre definidas em letras maiúsculas apenas para facilitar aos programadores a identificação de todas as macros do programa durante a leitura.
  • A macro nunca pode ser uma função de membro de uma classe, nem pode acessar os membros de dados de qualquer classe.
  • A função macro avalia o argumento cada vez que aparece em sua definição, o que resulta em um resultado inesperado.
  • A macro deve ter um tamanho menor, pois as macros maiores aumentarão desnecessariamente o tamanho do código.
  1. A diferença básica entre inline e macro é que as funções inline são analisadas pelo compilador, enquanto as macros em um programa são expandidas pelo pré-processador.
  2. A palavra-chave usada para definir uma função embutida é "na linha", Enquanto a palavra-chave usada para definir uma macro é"#definir“.
  3. Uma vez que a função embutida é decalcada dentro de uma classe, ela pode ser definida dentro ou fora de uma classe. Por outro lado, uma macro é sempre definida no início do programa.
  4. O argumento passado para as funções embutidas é avaliado apenas uma vez durante a compilação, enquanto o argumento das macros é avaliado sempre que uma macro é usada no código.
  5. O compilador pode não incorporar e expandir todas as funções definidas dentro de uma classe. Por outro lado, as macros são sempre expandidas.
  6. A função curta que é definida dentro de uma classe sem a palavra-chave embutida é criada automaticamente como funções embutidas. Por outro lado, a macro deve ser definida especificamente.
  7. Uma função embutida pode acessar os membros da classe, enquanto uma macro nunca pode acessar os membros da classe.
  8. Para finalizar uma função embutida, é necessário um colchete fechado, enquanto uma macro é finalizada com o início de uma nova linha.
  9. A depuração se torna fácil para a função inlne, pois é verificada durante a compilação por qualquer erro. Por outro lado, uma macro não é verificada durante a compilação, portanto, a depuração de uma macro torna-se difícil.
  10. Sendo uma função, uma função embutida vincula seus membros dentro de uma chave inicial e fechada. Por outro lado, a macro não possui nenhum símbolo de terminação, portanto, a ligação se torna difícil quando a macro contém mais de uma instrução.

Conclusões:

As funções embutidas são muito mais convincentes que a função macro. O C ++ também fornece uma maneira melhor de definir uma constante, que usa uma palavra-chave “const”.