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

  1. Como declarar macro
  2. Tipos de macros
  3. Macros nativas para depuração e log
  4. macros de versão

Uma macro é uma trecho de código que possui um nome e um valor ou expressão associado. Quando utilizada ao longo de nossos programas, a macro é substituído pelo seu valor ou expressão.

Sintaxe
#define nome_macro valor_macro
Onde
nome_macro: nome da macro
valor_macro: string , valor numérico ou expressão da macro
Exemplo 1
#include <iostream>
using namespace std;

#define MINHA_MACRO 2

int main()
{
    cout<< "macro:" << MINHA_MACRO;
    return 0;
}
Saída
macro:2

O assunto macro pode ser visto em Tutorial C: Macros e a diferença entre macros e funções pode ser visto em Tutorial C: Macro vs Função.

C++ suporta os quatro tipos básicos de macros : tipo objeto, cascata , multilinha e função. Nesta parte do tutorial vamos aprender esses tipos e ver exemplos.

Tab. 1: tipos de macros
Tipo Descrição
Objeto Define uma macro com valor
Cascata Define uma macro contendo macros
Multilinha Define uma macro com várias linhas
Função Definie uma macro em forma de função

Na macro tipo objeto, declaramos uma macro com um nome e atribuímos um valor a macro utilizando a sintaxe abaixo.

Sintaxe
#define NOME_MACRO valor_macro
Exemplo 1
#include <iostream>
using namespace std;

#define MINHA_MACRO 2

int main()
{
    cout<< "macro:" << MINHA_MACRO;
    return 0;
}
Saída
macro:2

Na macro em cascata, declaramos uma macro com um nome e atribuímos um valor a macro e utilizamos essa mesma macro como parte de uma nova macro.

Sintaxe
#define NOME_MACRO1 valor_macro

#define NOME_MACRO2 expressao_usando_NOME_MACRO1
Exemplo 2
#include <iostream>
using namespace std;

#define MINHA_MACRO 2
#define MINHA_MACRO2 MINHA_MACRO*2

int main()
{
    cout<< "macro:" << MINHA_MACRO2;
    return 0;
}
Saída
macro:4

A macro multilinha possui as mesmas características das anteriores. Na declaração do corpo de seu corpo, utilizamos (\) como quebra de linha após expressões, por exemplo.

Sintaxe
#define nome_macro \
expressao1 \
expressao2 \
expressao3 \
Exemplo 3
#include <iostream>
using namespace std;

#define TEXTO \
"uma \
string \
qualquer"
        
int main()
{
    cout<< "macro:" << TEXTO;
    return 0;
}
Saída
macro:uma string qualquer

No tipo função, a macro é declarada como uma função que possui parâmetros. Pode ser declarada em multilinha. Caso não haja parâmetros, a macro atua como multilinha.

Sintaxe
#define NOME_MACRO(param1, param2, paramN)
Exemplo 4
#include <iostream>
using namespace std;

#define ADICAO(p, q) \
        (p) + (q)
        
int main()
{
    cout<< "macro:" << ADICAO(2,2);
    return 0;
}
Saída
macro:4

Para informações de depuração como linha, arquivo e data de compilação, as macros __FILE__, __LINE__, __DATE__, __TIME__ e __TIMESTAMP__ que podem ser utilizadas para exibição de informações de debug, erro, log e outros.

Sintaxe
NOME_MACRO
Onde
NOME_MACRO:
__FILE__: nome do arquivo .cpp
__LINE__: linha
__DATE__: data. MM DD AAAA
__TIME__: hora da compilação
__TIMESTAMP__: data hora. Mes Dia hh:mm:ss aaaa
Exemplo 5
#include <iostream>
using namespace std;

int main()
{
	cout << __FILE__ << endl; 
	cout << __LINE__ << endl; 
	cout << __DATE__ << endl; 
	cout << __TIME__ << endl; 
	cout << __TIMESTAMP__ << endl;   
}
Saída
main.cpp
15
Dec 19 2022
13:13:03
Mon Dec 19 13:13:01 2022
  1. 29/07/2025 - revisão 3 - Correção: targets 'Tutorial C', sintaxe 'tipo função', link 'Macros Nativas'; Ajustes: sintaxes
  2. 28/09/2024 - revisão 2 - correções e ajustes pontuais
  3. 09/02/2024 - revisão 1 - correção em navegação e erros gramaticais
  4. 30/06/2023 - versão inicial