Вы не можете "сбросить" SUM
как 3, потому что SUM
- это не 3 в каком-либо значимом смысле, это просто последовательность из трех токенов ONE
, +
и TWO
. То, во что это превращается, зависит от контекста, в котором оно раскрывается.
Макросы раскрываются там, где они появляются в источнике, замены макросов до сих пор были просто цепочками токенов.
Вы можете проверить это следующим образом.
#include <stdio.h>
#define ONE 1
#define TWO 2
#define SUM ONE+TWO
int a = SUM;
#undef ONE
#define ONE 2
int b = SUM;
int main()
{
printf("a = %d\nb = %d\n", a, b);
return 0;
}
Вот еще один пример:
#include <stdio.h>
#define ONE 1
#define TWO 2
#define SUM ONE+TWO
int main()
{
/* prints 6, not 2 */
printf("5 - SUM = %d\n", 5 - SUM);
return 0;
}
С помощью этого примера вы не сможете оправдать SUM
быть 3
.