При попытке использовать блочную структуру в качестве «замещающего текста» с помощью оператора #define, например, ниже,
#define swap(t,x,y) { t _z; \
_z = x; \
x = y; \
y = _z; }
Затем я пытаюсь использовать его с:
printf( "%.2f %.2f\n", pow(a,b), pow( swap(int,a,b) ) );
Но я получаю следующую ошибку компилятора
414.c:14:21: error: expected expression before ‘{’ token
#define swap(t,x,y) { t _z; \
^
414.c:27:41: note: in expansion of macro ‘swap’
printf( "%.2f %.2f\n", pow(a,b), pow( swap(int,a,b) ) );
^~~~
Разве не разрешено использовать блочные структуры, подобные этой? Что если я захочу использовать локальную переменную для макроса?
В сообщении о проблеме специально сказано, что нужно использовать блочные структуры, и в «Книге ответов C» этот точный фрагмент кода используется в качестве решения.