minhas informações de contato
Correspondência[email protected]
2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
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,否则未定义
Resultado dos testes:
#define é usado para escrever a definição ao definir uma constante:
#define MAX 100
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:
#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))
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:
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.
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:
- 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.
- As macros não podem ser depuradas.
- Como as macros são independentes de tipo, elas não são suficientemente rigorosas.
- 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 definidas | funçã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á significativamente | O código da função aparece apenas em um local cada vez que é usado, o mesmo código nesse local é chamado; |
Velocidade de execução | mais rápido | Há uma sobrecarga adicional de chamadas e retornos de função, que é mais lenta. |
operador precedente | Os 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 colaterais | Os 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âmetro | Os 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. |
depurar | Macros são inconvenientes para depurar | As funções podem ser depuradas instrução por instrução |
recursão | Macros não podem ser recursivas | Macros não podem ser recursivas |
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:
## 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: