C: # definir uso

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