Macro em linguagem C

Macro em linguagem C
Uma macro no idioma C é um pedaço de código que recebeu um nome. Quando o nome é usado em qualquer lugar do programa, o valor macro é substituído antes da compilação do programa. Neste artigo, veremos em detalhes como escrever uma macro na linguagem C.

Considere o seguinte código:

COMEÇAR
Número inteiro n = 5;
Print ("valor de n é %d", n);
FIM

O código acima não é um código C válido.

Mas o código a seguir é válido:

//Exemplo 1.c
#Define Start int main ()
#Define final
#Define Integer Int
#Define Print (a, b) printf (a, b)
COMEÇAR
Número inteiro n = 5;
Print ("valor de n é %d", n);
FIM

Antes da compilação, o início da macro, o número inteiro, a impressão e o final foi substituída por seu valor, e o código se torna um código C válido. Podemos verificar usando o seguinte comando:

GCC -e Exemplo1.c

Este comando será exibido depois de expandir todas as macros.

Agora veremos diferentes tipos de macros:

1. Macros semelhantes a objetos:

Sintaxe:

#Define macro_name macro_value
  • Macro está sempre começando com #define
  • macro_name é um nome definido pelo usuário da macro
  • macro_value é o valor da macro. Pode ser qualquer coisa, exceto uma linha e o corpo macro termina com as extremidades dessa linha. Não requer semicolon (;) no final. O espaço também é considerado.

Se a macro levar mais de uma linha, podemos fazê -lo da seguinte forma:

#Define macro_name macro_value1 \
macro_value2 \
macro_value3
#Define max 200

Esta macro parece um objeto de dados e é por isso que esse tipo de macro chamado como uma macro semelhante a um objeto.

// Exemplo2.c
//#incluir
#Define max 200
int main ()

printf ("valor máximo é: %d", max);
retornar 0;

Em EXAPMLE2.C, Max é uma macro. Da saída, observamos que Máx é substituído por seu valor 200.

2. Macros do tipo função:

Sintaxe:

#define macro_name () macro_value

macro_name é um nome definido pelo usuário da macro. Par de parênteses tem que colocar depois do macro_name. Nenhum espaço é permitido entre macro_name e parênteses. Também podemos passar argumentos nesse tipo de macros.

#define add (x, y) x+y

Esta macro parece uma chamada de função e é por isso que esse tipo de macro chamou uma macro do tipo função.

// Exemplo3.c
#define add (x, y) x+y
int main ()

int a;
flutuar B;
a = add (4,5);
b = add (2.5,3.6)
retornar 0;

No exemplo3.c, Vimos que, diferentemente da função de C, a macro substitui apenas o código por argumentos sem calcular. Então, podemos passar diferentes do tipo de dados usando a mesma macro.

Se colocarmos um espaço entre o nome da macro e o parêntese, ele funciona da mesma forma que uma macro semelhante a um objeto. Abaixo C Exemplo ilustra isso.

// Exemplo4.c
#define add (x, y) x+y
int main ()

int a;
flutuar B;
a = add (4,5);
b = add (2.5,3.6)

No exemplo4.c, vimos que a macro add é substituída por (x, y) x+y . O mesmo que uma macro semelhante a objetos.

3. Macro para colagem de token:
No idioma C, o operador ## é usado para colar token. Usando este operador, podemos combinar dois tokens válidos em um token válido.
Exemplo:

// Exemplo5.c
#define marge (x, y) x ## y
int main ()

int num = marge (52,34);
retornar 0;

Se tentarmos a colagem do token que não gera um token válido, o compilador C dá um erro ou aviso.

// Exemplo6.c
#define marge (x, y) x ## y
int main ()

int num = marge (52,+);
retornar 0;

Em Exemplo6.c, Temos uma mensagem de erro porque, após uma combinação de dois tokens, recebemos um token inválido '52+'.

4. Macro para Stringizing:
Na linguagem C, # Operador é usado para converter um parâmetro macro em uma string constante. Quando um operador # precede com um parâmetro macro, o parâmetro se converte em uma string literal. Stringizing pode ser usado para macros semelhantes a objetos e de função.
Exemplo:

// Exemplo7.c
#Define Stringizing (x) #x
int main ()

printf (Stringizing (Hello World));
retornar 0;

Em Exemplo7.c Temos uma string "Hello World" usando macro stringizing.

Conclusão:

Este artigo aprendeu sobre todos os tipos de macro, tipo Macros semelhantes a objetos, Macros do tipo função, Macro para colar, Macro para Stringizing e Macro para Stringizing na linguagem C. Agora podemos usar uma macro em nosso programa C sem dúvida.