Sintaxe:
#define nome-da-macro cadeia-correspondente
O comando #define é utilizado para fazer substituições ao longo do ficheiro em que está localizado. Ou seja, #define faz com que o compilador percorra o ficheiro, substituindo cada ocorrência de nome-da-macro por cadeia-correspondente. A cadeia colocada termina no final da linha.
Aqui está um exemplo típico de uso para um #define (em C):
#define TRUE 1 #define FALSE 0 ... int done = 0; while( done != TRUE ) { ... }
Outra função do comando #define é que ele pode receber argumentos, tornando-o uma poderosa ferramenta para criação de pseudo-funções. Considere o seguinte código:
#define absolute_value( x ) ( ((x) < 0) ? -(x) : (x) ) ... int num = -1; while( absolute_value( num ) ) { ... }
Geralmente é uma boa ideia usar parênteses extras quando criar macros complexas. Note que no exemplo acima, a variável “x” está sempre dentro do seu conjunto de parênteses. Desta forma, ela será avaliada por inteiro, antes de ser comparada com 0 ou multiplicada por -1. Além disso, a macro inteira está rodeada por parênteses, para prevenir que seja contaminada por outro código. Se não for cuidadoso, corre o risco de ter o compilador a interpretar de forma errada o seu código. Aqui está um exemplo de como usar o comando #define para criar um loop incrementador genérico for que imprime os inteiros de 1 a 20:
#define count_up( v, low, high ) \ for( (v) = (low); (v) <= (high); (v)++ ) ... int i; count_up( i, 1, 20 ) { printf( "i is %d\n", i ); }
Tópicos Relacionados: # e ##, #if,...,#endif, #undef