C: #define use

Результат следующего скрипта – 20. Но может ли кто-нибудь объяснить, почему это так, а не 110

#include #define MAX 10 #define MAXLEN MAX+1 int main() { printf("%d", MAXLEN * 10); getchar(); return 0; } 

Поскольку MAX равно 10, MAXLEN составляет 10 + 1, и вы печатаете 10 + 1 * 10, что составляет 20.

Расширение макроса заменяет строки стенографически, и именно поэтому вы должны использовать круглые скобки при их определении. Например:

 #define MAXLEN (MAX+1) 

Подумайте, что это расширяет до

 MAXLEN * 10 == MAX+1 * 10 

который, когда вы считаете, что приоритет оператора дает

 MAX + (1 * 10) == 10 + (1 * 10) == 10 + 10 == 20 

Вы, наверное, хотели

 #define MAXLEN (MAX+1) 

вместо.

 MAXLEN * 10 => MAX + 1 * 10 => 10 + (1 * 10) => 20