На основании использования и того факта, что c
не используется в макросе, похоже, что в макросе есть опечатка.Вместо использования int
следует сказать c
:
#define swap(a,b,c)(c t;t=a;a=b;b=t;);
На самом деле, хотя это «исправление» даст вам общее представление о макросе, оно не будет компилироваться.Пожалуйста, см. ответ Пеймана , в котором рассказывается, как его правильно написать.
По сути, это похоже на способ обмена двумя переменными a
, b
типа c
.
В вашем случае вывод будет:
20 10
Способ работы этого алгоритма обмена прост.По сути, вы хотите скопировать a
в b
и b
в a
.Однако, если вы просто скопируете b
в a
, вы потеряете a
, и вы застрянете с двумя копиями b
.
вместо простого копирования b
вa
, вы сначала сохраняете копию a
во временную переменную , называемую t
, затем копируете b
в a
, затем копируете t
(которая содержит исходное значениеa
) в b
.Когда вы закончите, вы можете забыть о t
.