Clique sobre os tópicos listados abaixo para navegar até o conteúdo desejado.

  1. Diretiva #define
  2. Diretiva #undef

A linguagem C nos permite definir macros, constantes e renomear recursos utilizando a diretiva #define. Com o uso dessa diretiva, podemos declarar macros que durante a compilação, suas chamadas são substituídas pelas declarações contidas em seus corpos.

Sintaxe
#define nome_macro valor|expressão|funcao 
Exemplo 1
#include <stdio.h>
#define DEBUG 1

void main()
{
    printf("%d \n",DEBUG); //DEBUG é substituído por 1 antes da compilação.
}
Saída
1

Podemos dar apelidos aos tipos de dados nativos da linguagem C "criando" novos tipos para evitar a digitação de longos tipos de dados:

Exemplo 2
#include <stdio.h>
#define uint unsigned int

void main()
{
    uint teste = 999; //uint é substituído por unsigned int
    printf("%u \n",teste);
}
Saída
999

Além de criar apelidos para os tipos de dados, como no exemplo acima, podemos apelidar também os comandos da linguagem C, como no exemplo abaixo:

Exemplo 3
#include <stdio.h>
#define se if
#define senao else

int main()
{
    se(1 != 1)
        printf("%s \n", "if substituido!");
    senao
        printf("%s \n", "else substituido!");
}
Saída
else substituido!

A diretiva #define nos permite a criação de macros mais complexas em que seu conteúdo, sendo possível utilizar variáveis, funções e expressões. Mais sobre macros pode ser visto em C Diretivas: Macros.

A diretiva #undef é bem simples de entender. Essa diretiva é utilizada para desfazer um(a) #define previamente criada em nosso programa.

Sintaxe
#undef nome_macro
Exemplo 4
#include <stdio.h>
int main()
{
	#define FORMULA(a,b) (a) + (b)
	printf("%d \n",FORMULA(1,2));
	#undef FORMULA
	#define FORMULA(a,b) (a) * (b)	
	printf("%d \n",FORMULA(1,2));
}
Saída
3 
2
  1. 04/09/2025 - revisão 3 - Ajustes: diretiva #define, sintaxes e objetivos
  2. 07/10/2024 - revisão 2 - Ajustes pontuais
  3. 29/09/2023 - revisão 1 - Correção em referências, erros gramaticais e exemplo 3
  4. 19/05/2023 - versão inicial