Definição de macro de notas de estudo

 
 

Substituição de macro:

Defina o nome da macro:

#define a memória onde o nome da macro será substituído

Use o nome da macro:

printf("%d\n", nome da macro);

Observação: no estágio de pré-processamento, o pré-processador substituirá o nome da macro usado pelo código pelo conteúdo após o nome da macro.

Constantes de macro:

#define dados literais do nome da macro

Use um nome significativo para substituir os dados de valor literal sem sentido, o que pode melhorar a legibilidade e a escalabilidade do código.

Expressão macro:

#define expressões de nomes de macro, operações, identificadores mais complexos

#define STU_FORMAT "%s %c %hd %d"

#define sf scanf

#define YEAR_SEC (3600*24*365ul)

Macros pré-definidas:

Macros predefinidas do compilador:

__FILE__ Obtém o nome do arquivo atual

__func__ Obtém o nome da função atual

__LINE__ Obtém o número da linha atual

__DATE__ obtém a data atual

__TIME__ Obtém a hora atual

__WORDSIZE Obtém o número de bits do compilador atual

Adequado para exibir mensagens de aviso e erro.

Macros predefinidas da biblioteca padrão:

Os valores máximos e mínimos de todos os tipos inteiros definidos no arquivo de cabeçalho limits.h

#define SCHAR_MIN (-128)

#define SCHAR_MAX 127

#define UCHAR_MAX 255

#define SHRT_MIN (-32768)

#define SHRT_MAX 32767

#define USHRT_MAX 65535

#define INT_MIN (-INT_MAX - 1)

#define INT_MAX 2147483647

#define UINT_MAX 4294967295U

#define LLONG_MAX 9223372036854775807LL

#define LLONG_MIN (-LLONG_MAX - 1LL)

#define ULLONG_MAX 18446744073709551615ULL

Função macro:

#define 宏名(a,b,c,...) a+b*c

Uma função de macro não é uma função real, mas uma macro com parâmetros, usada apenas como uma função.

Ao usar uma função de macro no código, haverá duas substituições durante o pré-processamento. Na primeira vez, a função de macro é substituída por uma sequência de códigos e expressões por trás dela e, na segunda vez, os parâmetros da função de macro são substituídos na expressão .

Se o código por trás da função de macro tiver várias linhas, você poderá usar chaves para protegê-lo.

#define nome da macro(a,b,c,...) {código 1; código 2; ​​...}

O código por trás da função de macro não pode ser agrupado diretamente. Se o código for muito longo, você pode usar o caractere de continuação para quebrar a linha.

#define nome da macro(a,b,c,...) { \

código 1; \

código 2; ​​\

... \

}

#define trocar(a,b) { \

char tmp[tamanho(a)]; \

memcpy(tmp,&a,sizeof(a)); \

memcpy(&a,&b,sizeof(a)); \

memcpy(&b,tmp,sizeof(a)); \

}

Vantagens e desvantagens de funções comuns e funções macro?

Vantagens das funções de macro:

1. A velocidade de execução é rápida, não é uma chamada de função real, mas uma substituição de código, e não experimentará parâmetros de valor, saltos,

valor de retorno.

2. O tipo de parâmetro não será verificado, por isso é altamente versátil.

Desvantagens das funções de macro:

1. Por não ser uma chamada de função real, mas uma substituição de código, toda vez que for usada, uma cópia do código será substituída, o que causará redundância de código, baixa velocidade de compilação e grande arquivo executável.

2. Não há valor de retorno e pode haver no máximo um resultado de execução.

3. A verificação de tipo não é rigorosa e a segurança é baixa.

4. Chamadas recursivas não podem ser feitas.

Vantagens das funções:

1. No caso de não haver armazenamento redundante, o código da função será armazenado apenas no segmento de código, quando usado, ele irá pular para o passado para execução, retornar após a execução, podendo também ser adicionado valor de retorno.

2. Alta segurança, verificação de tipo será executada nos parâmetros.

3. Chamadas recursivas podem ser feitas para implementar o algoritmo de divisão e conquista.

Desvantagens das funções:

1. Em comparação com a função macro, sua velocidade de execução é mais lenta, ao chamar, passará pelo processo de passagem de parâmetros, salto, retorno, etc.

2. Tipo específico, que tipo de parâmetro formal e que tipo de parâmetro real deve ser, que não pode ser usado universalmente.

Que tipo de código é adequado para encapsulamento em uma função de macro?

1. A quantidade de código é pequena, mesmo que seja usada várias vezes, não causará redundância excessiva no segmento de código.

2. O número de chamadas é alto, mas o número de execuções é alto.

3. Não há exigência de valor de retorno.

Pontos a ter em mente ao criar macros:

1. Não adicione um ponto e vírgula no final.

2. Adicione parênteses para evitar ambigüidade.

3. Não use variáveis ​​de auto-incremento e auto-decremento para fornecer parâmetros para funções de macro.

おすすめ

転載: blog.csdn.net/m0_62480610/article/details/125772477