Compartilhamento de tecnologia

Pré-processamento de "Linguagem C"

2024-07-12

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

1. Símbolos predefinidos

A linguagem C define alguns símbolos predefinidos que podem ser usados ​​diretamente e processados ​​durante o pré-processamento.

__FILE__//进行编译的源文件
__LINE__//文件当前的行号
__DATE__//文件被编译的日期
__TIME__//文件被编译的时间
__STDC__//如果编译器遵循ANSI C,其值为1,否则未定义
  • 1
  • 2
  • 3
  • 4
  • 5

Resultado dos testes:
Insira a descrição da imagem aqui

2. #define define constantes

#define é usado para escrever a definição ao definir uma constante:

#define MAX 100
  • 1

A regra lógica é substituir diretamente MAX por 100 quando aparecer no código a seguir. Esta etapa da operação é concluída no estágio de pré-processamento. Geralmente, ao usar #define para definir uma constante, o nome é escrito em letras maiúsculas.

cenas a serem usadas:
Insira a descrição da imagem aqui

3. #define define macros

#define é usado para definir macros da mesma forma que funções, mas a lógica é a substituição. Ao substituir, as variáveis ​​devem ser colocadas entre parênteses para evitar problemas de prioridade do operador que podem não resultar nos resultados esperados.
Como usar:

#define MAX(x,y) ((x) > (y) ? (x) : (y))
  • 1

Esta é uma macro escrita para completar o julgamento do valor diretamente maior de dois números. Observe que os colchetes após o nome da macro devem estar próximos da macro.

Caso de uso:
Insira a descrição da imagem aqui
Insira a descrição da imagem aqui

Através dos dois casos acima, podemos descobrir que as macros não limitam o tipo ao passar parâmetros. Se a função for passada, o tipo de retorno da função é fixo e a macro é executada mais rapidamente.

4. Comparação das funções de atualização de macro

Vantagens das macros:

  • 1. Ao realizar cálculos com uma pequena quantidade de código, o tempo de trabalho das macros é menor que o das funções.
  • 2. Mais importante ainda, os parâmetros da função devem ser declarados com tipos específicos. As macros podem ser aplicadas a vários tipos que podem ser comparados usando >. O tipo de macro é irrelevante.

Desvantagens das macros:

    1. Cada vez que uma macro for utilizada, uma cópia do código de definição da macro será inserida no programa. A menos que a macro seja relativamente curta, isto pode aumentar significativamente a duração do programa.
    1. As macros não podem ser depuradas.
    1. Como as macros são independentes de tipo, elas não são suficientemente rigorosas.
    1. As macros podem causar problemas de precedência do operador, tornando os programas propensos a erros.

Tabela de comparação de macros e funções:

Atributos#define macros definidasfunção
comprimento do código A macro é inserida no programa cada vez que é utilizada.Exceto para macros muito pequenas, a duração do programa aumentará significativamenteO código da função aparece apenas em um local cada vez que é usado, o mesmo código nesse local é chamado;
Velocidade de execuçãomais rápidoHá uma sobrecarga adicional de chamadas e retornos de função, que é mais lenta.
operador precedenteOs parâmetros da macro são avaliados no contexto de todas as expressões circundantes. A menos que parênteses sejam incluídos, a precedência dos operadores adjacentes pode ter consequências imprevisíveis, por isso é recomendado que as macros sejam escritas com mais parênteses. Os parâmetros da função só são avaliados e passados ​​para a função quando a função é chamada. As expressões são avaliadas de forma previsível.
Parâmetros com efeitos colateraisOs parâmetros podem ser substituídos em vários locais dentro do corpo da macro e, se os parâmetros de uma macro forem avaliados diversas vezes, a avaliação dos parâmetros com efeitos colaterais poderá produzir resultados imprevisíveis.Os parâmetros da função são avaliados apenas ao passar parâmetros e são fáceis de controlar.
Tipo de parâmetroOs parâmetros da macro não têm nada a ver com o tipo, desde que a operação nos parâmetros seja legal, ela pode ser usada para qualquer tipo de parâmetro.Os parâmetros da função estão relacionados ao tipo. Se forem diferentes, serão necessárias funções diferentes e as tarefas serão diferentes.
depurarMacros são inconvenientes para depurarAs funções podem ser depuradas instrução por instrução
recursãoMacros não podem ser recursivasMacros não podem ser recursivas

5. # e ##

1. #operador

O #operador converte um argumento de uma macro em uma string literal. Só é permitido aparecer na lista de substituição de uma macro com parâmetros.
A operação realizada pelo operador # pode ser entendida como “stringificação”.

Exemplo de uso:
Insira a descrição da imagem aqui

2. ## operador

## pode combinar os símbolos de ambos os lados em um símbolo, o que permite que definições de macro criem identificadores a partir de segmentos de texto separados.cola para marcadores
Tal conexão deve produzir um identificador válido. Caso contrário, o resultado será indefinido. Vamos pensar sobre isso aqui. Ao escrever uma função para encontrar o valor maior de dois números, funções diferentes devem ser escritas para tipos de dados diferentes.

Exemplo de uso:
Insira a descrição da imagem aqui