Обмен значениями макросов - PullRequest
0 голосов
/ 23 февраля 2012

Это может показаться глупым, но я, кажется, забыл порядок замены макросов. Может кто-нибудь помочь мне разобраться, как правильно поменять значения двух макросов? Учтите следующее:

#include <stdlib.h>
#include <stdio.h>

#define var1 5
#define var2 10

#define _VAL(a) a
#define VAL(a) _VAL(a)


int main(){

    printf("var1 = %d, var2 = %d\n", var1, var2);

#define TEMP VAL(var1)
#undef var1
#define var1 VAL(var2)
#undef var2
#define var2 VAL(TEMP)

    printf("var1 = %d, var2 = %d\n", var1, var2);
}

Все, что я хочу, - это заменить var1 на 10 и var2 на 5. Есть какие-нибудь идеи, как исправить этот беспорядок?

Я пытаюсь использовать это, чтобы попытаться выяснить что-то для этого другого вопроса:

C Макрос для защиты определений

1 Ответ

2 голосов
/ 23 февраля 2012

Не может быть сделано.
Как объясняет @jeffamaphone в своем комментарии, определения макросов не являются присваиваниями.
#define A B не заботится о значении B.Он просто помнит, что A следует заменить на B.Позже, когда в источнике замечено A, оно заменяется на B, которое затем может быть заменено снова тем, что определено B в то время.

...