La salida de la siguiente secuencia de comandos es 20. Pero alguien puede explicar por qué es así, y no 110
#include #define MAX 10 #define MAXLEN MAX+1 int main() { printf("%d", MAXLEN * 10); getchar(); return 0; }
Como MAX
es 10, MAXLEN
es 10 + 1 e imprime 10 + 1 * 10, que es 20.
La expansión de macros sustituye las cadenas textualmente y es por eso que debe usar paréntesis al definirlas. Por ejemplo:
#define MAXLEN (MAX+1)
Considera a lo que esto se expande
MAXLEN * 10 == MAX+1 * 10
el cual, cuando se considera la prioridad del operador da
MAX + (1 * 10) == 10 + (1 * 10) == 10 + 10 == 20
Probablemente quiso
#define MAXLEN (MAX+1)
en lugar.
MAXLEN * 10 => MAX + 1 * 10 => 10 + (1 * 10) => 20