Recomendado, 2024

Escolha Do Editor

Diferença entre inline e macro em C ++

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 invocação. Uma diferença principal entre inline e macro função é que as funções inline são expandidas durante a compilação e as macros são expandidas 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.

Gráfico de comparação

Base para ComparaçãoNa linhaMacro
BasicFunções embutidas são analisadas pelo compilador.As macros são expandidas pelo pré-processador.
Sintaxeinline return_type funct_name (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çãoAvalia o argumento apenas uma vez.Avalia o argumento toda vez que é usado no código.
ExpansãoO compilador não pode inline e expandir todas as funções.As macros são sempre expandidas.
AutomaçãoAs funções curtas, definidas dentro da classe, são automaticamente feitas em funções inline.As macros devem ser definidas especificamente.
AcessandoUma função de membro inline pode acessar os membros de dados da classe.Macros nunca podem ser membros da classe e não podem acessar os membros de dados da classe.
TerminaçãoA definição da função inline termina com as chaves no final da função inline.A definição da macro termina com a nova linha.
DepuraçãoA depuração é fácil para uma função inline, 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 inline liga todas as instruções no corpo da função muito bem como o corpo da função começa e termina com as chaves.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 inline se parece com uma função regular, mas é precedida pela palavra-chave " inline ". As funções embutidas são funções curtas que são expandidas no ponto de sua invocação, em vez de serem chamadas. Vamos entender funções inline com um exemplo.

 #include usando namespace std; exemplo de classe {int a, b; public: void inline inicializar (int x, int y) {a = x; b = y} void display () {cout << a << "" < 

No programa acima, declarei e defini, a função initialization (), como uma função inline na classe “example”. O código da função initialization () expandirá onde é invocado pelo objeto da classe “example”. 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 embutida pelo compilador considerando o comprimento da função.

  • A função inline reduz a sobrecarga de chamada e retorno de função, o que reduz o tempo de execução do programa. Além disso, os argumentos são colocados na pilha e os registros são salvos quando uma função é chamada e redefinida quando a função retorna, o que leva tempo, isso é evitado pelas funções embutidas, já que 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 Inline reduz o tempo de execução do programa, mas, às vezes, se o comprimento da função inline for maior, o tamanho do programa também aumentará devido ao código duplicado. Por isso, é uma boa prática incorporar funções muito pequenas.
  • O argumento da função inline é 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 sempre que encontrar a macro no programa, substitui essa macro por sua definição. Por isso, a macro é considerada como a “substituição de texto”. Vamos estudar macro com um exemplo.

 #include #define MAIOR (a, b) ((a <b)? b: a) int main (vazio) {cout << "Maior de 10 e 20 é" << MAIOR ("20", "10") << "\ n"; return 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 é terminada apenas pela nova linha. Como uma macro é apenas uma substituição de texto, ela expandirá o código da macro onde ela é invocada.

  • As macros são sempre definidas nas letras maiúsculas apenas para facilitar aos programadores identificar todas as macros no programa durante a leitura.
  • A macro nunca pode ser uma função de membro da classe, nem pode acessar os membros de dados de qualquer classe.
  • A função macro avalia o argumento toda vez que aparece em sua definição, o que resulta em um resultado inesperado.
  • A macro deve ser de tamanho menor, pois as macros maiores aumentarão desnecessariamente o tamanho do código.

Principais diferenças entre inline e macro

  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 inline é " inline ", enquanto que a palavra-chave usada para definir uma macro é " #define ".
  3. Uma vez que a função inline é decalre dentro de uma classe, ela pode ser definida dentro de uma classe 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 cada vez que uma macro é usada no código.
  5. O compilador não pode inline e expandir todas as funções definidas dentro de uma classe. Por outro lado, as macros são sempre expandidas.
  6. As funções curtas que são definidas dentro de uma classe sem a palavra-chave inline são automaticamente funções embutidas. Por outro lado, Macro deve ser definido especificamente.
  7. Uma função que é inline pode acessar os membros da classe, enquanto uma macro nunca pode acessar os membros da classe.
  8. Para finalizar uma função inline, é necessária uma chave fechada, 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 inline vincula seus membros a chaves de início e de fechamento. Por outro lado, a macro não possui nenhum símbolo de terminação, portanto, a ligação torna-se difícil quando a macro contém mais de uma instrução.

Conclusões

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

Top