#define swap(a,b) a = a ^ b; b = a ^ b; a = a ^ b;
int main()
{
swap(a,b)
}
Дает правильный ответ.
#define swap(a,b) (a = a ^ b; b = a ^ b; a = a ^ b;)
int main()
{
swap(a,b)
}
Дает ошибку компиляции: «ожидается») «до»;token "
#define swap(a,b) ({a = a ^ b; b = a ^ b; a = a ^ b;})
int main()
{
swap(a,b); //note the semicolon at the end, without that the compiler gives an error
}
отлично работает.
Теперь моя путаница в том, почему второе не работает?Я думаю, что это должно работать отлично.А во-вторых, зачем мне ставить точку с запятой в конце вызова макроса в третьем?