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ção | Na linha | Macro |
---|---|---|
Basic | Funções embutidas são analisadas pelo compilador. | As macros são expandidas pelo pré-processador. |
Sintaxe | inline return_type funct_name (parâmetros) {. . . } | #define macro_name char_sequence |
Palavras-chave usadas | na linha | #definir |
Definiram | Pode ser definido dentro ou fora da classe. | É sempre definido no início do programa. |
Avaliação | Avalia o argumento apenas uma vez. | Avalia o argumento toda vez que é usado no código. |
Expansão | O compilador não pode inline e expandir todas as funções. | As macros são sempre expandidas. |
Automação | As funções curtas, definidas dentro da classe, são automaticamente feitas em funções inline. | As macros devem ser definidas especificamente. |
Acessando | Uma 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ção | A 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ção | A 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ório | Uma 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
- 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.
- A palavra-chave usada para definir uma função inline é " inline ", enquanto que a palavra-chave usada para definir uma macro é " #define ".
- 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.
- 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.
- 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.
- 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.
- Uma função que é inline pode acessar os membros da classe, enquanto uma macro nunca pode acessar os membros da classe.
- Para finalizar uma função inline, é necessária uma chave fechada, enquanto uma macro é finalizada com o início de uma nova linha.
- 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.
- 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".