#define A f1();
...
#define TEMP_A A
#undef A
#define A TEMP_A f2();
#undef TEMP_A
...
Хотя я предлагаю вам рассмотреть это как:
#define A f1()
// Note the lack of the semicolon
...
#define TEMP_A
#undef A
#define A do { TEMP_A; f2(); } while (0)
#undef TEMP_A
Так как это позволит и правильно использовать точки с запятой при вызове макросов в коде.
Ситуация усложняется, если ваши функции возвращают значения и вы хотите получить доступ к этим значениям, но тогда вам следует изучить использование оператора комы.
#define A (( TEMP_A, f2() ))
Это позволит вам A
возвращать значение, возвращаемое f2()
после выполнения TEMP_A
, то есть f1()
. Двойные круглые скобки делают это так, что если вы делаете что-то глупое, как:
printf A;
он не пытается рассматривать его как список аргументов и только как один аргумент.