C · Intermediário · Português · Técnico
macro com argumentos
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); // 5Exemplos
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