ExpertiDict

C · Intermediário · Português · Técnico

macro com argumentos

/ˈma.kɾu kõ aʁ.guˈmẽ.tus/substantivo

Macro que recebe parâmetros, como #define QUAD(x) ((x) * (x)), expandida como texto no lugar da chamada. Não é função: não há tipos, pilha nem avaliação única dos argumentos.

Onde usar

Cerque cada parâmetro e a expressão inteira com parênteses; sem eles, QUAD(a + 1) vira a + 1 * a + 1. Para código que precisa de tipos, prefira funções static inline.

Em código

#define QUAD(x) ((x) * (x))
#define MAX(a, b) ((a) > (b) ? (a) : (b))
int a = QUAD(3 + 1); // 16
int m = MAX(2, 5); // 5

Exemplos

Falta parênteses em volta do parâmetro dessa macro com argumentos.

Troquei a macro com argumentos por uma função static inline.

Cuidado

Passar argumentos com efeito colateral, como QUAD(i++), que podem ser avaliados mais de uma vez.

Sinônimos

function-like macro

Veja também

Todos os termos de C