Considere o seguinte código:
COMEÇARINTEIRO n = 5;
PRINT ("O valor de n é% d", n);
FIM
O código acima não é um código C válido.
Mas o seguinte código é válido:
//Exemplo 1.c#define START int main ()
#define END
#define INTEGER int
#define PRINT (A, B) printf (A, B)
COMEÇAR
INTEIRO n = 5;
PRINT ("O valor de n é% d", n);
FIM
Antes da compilação, a macro START, INTEGER, PRINT e END foram substituídos por seus valores, e o código se torna um código C válido. Podemos verificar usando o seguinte comando:
gcc -E Example1.cEste comando aparecerá 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, mas uma linha e o corpo da macro termina com as extremidades dessa linha. Não requer ponto e vírgula (;) no final. O espaço também é considerado.
Se a macro ocupar mais de uma linha, podemos fazer da seguinte maneira:
#define macro_name macro_value1 \macro_value2 \
macro_value3
# define MAX 200
Esta macro se parece com um objeto de dados, por isso este tipo de macro é chamado de macro semelhante a um objeto.
// Exemplo2.c//#incluir
# define MAX 200
int main ()
printf ("O valor MAX é:% d", MAX);
return 0;
Dentro Exapmle2.c, MAX é uma macro. A partir da saída, observamos que MAX é substituído por seu valor 200.
2. Macros semelhantes a funções:
Sintaxe:
#define macro_name () macro_valuemacro_name é um nome definido pelo usuário da macro. Par de parênteses deve ser colocado após o macro_name. Nenhum espaço é permitido entre macro_name e parênteses. Também podemos passar argumentos neste tipo de macros.
#define add (x, y) x + yEsta macro parece uma chamada de função, por isso este tipo de macro é chamada de macro semelhante a uma função.
// Exemplo3.c# define add (x, y) x + y
int main ()
int a;
float b;
a = adicionar (4,5);
b = adicionar (2.5,3.6)
return 0;
No Exemplo 3.c, vimos que, ao contrário da função C, a macro substitui apenas o código por argumentos sem calculá-lo. Então, podemos passar diferentes tipos de dados usando a mesma macro.
Se colocarmos um espaço entre o nome da macro e parênteses, funcionará da mesma forma que uma macro semelhante a um objeto. O exemplo C abaixo ilustra isso.
// Exemplo4.c# define add (x, y) x + y
int main ()
int a;
float b;
a = adicionar (4,5);
b = adicionar (2.5,3.6)
No Exemplo 4.c, vimos que a adição de macro é substituída por (x, y) x + y . O mesmo que uma macro semelhante a um objeto.
3. Macro para colagem de token:
Na linguagem C, o operador ## é usado para colar token. Usando este operador, podemos combinar dois tokens válidos em um token válido.
Exemplo:
#define MARGE (x, y) x ## y
int main ()
num int = MARGE (52,34);
return 0;
Se tentarmos colar um token que não gere um token válido, o compilador C fornece um erro ou aviso.
// Exemplo6.c#define MARGE (x, y) x ## y
int main ()
num int = MARGE (52, +);
return 0;
Dentro Exemplo 6.c, temos uma mensagem de erro porque, após uma combinação de dois tokens, obtemos um token inválido '52 + '.
4. Macro para stringizing:
Na linguagem C, o operador # é usado para converter um parâmetro de macro em uma constante de string. Quando um operador # precede um parâmetro de macro, o parâmetro é convertido em um literal de string. Stringizing pode ser usado para macros do tipo objeto e do tipo função.
Exemplo:
#define STRINGIZING (x) #x
int main ()
printf (STRINGIZING (Hello World));
return 0;
Dentro Exemplo 7.c temos uma string “Hello World” usando a macro STRINGIZING.
Conclusão:
Este artigo aprendeu sobre todos os tipos de macro Macros semelhantes a objetos, Macros semelhantes a funções, Macro para colar token, Macro para sequenciamento e macro para sequenciamento em linguagem C. Agora podemos usar uma macro em nosso programa C sem nenhuma dúvida.