Есть ли встроенная функция подкачки в C? - PullRequest
33 голосов
/ 14 января 2012

Есть ли в C встроенная функция подкачки, которая работает без использования третьей переменной?

Ответы [ 11 ]

0 голосов
/ 14 января 2012

есть std::swap, так как в целом это зависит от вашего процессора, поддерживает ли он обмен.есть инструкция «сравнить и поменять местами», но она работает только с типами, которые вписываются в регистр, и гарантированно является атомарной.Существует встроенная реализация сравнения и свопинга (CAS) из gcc , которая используется для синхронизации реализаций потоков и мьютексов и, вероятно, выходит за рамки вашей цели, поэтому лучше придерживаться только использования временногопеременная или если вы действительно застряли в C, вы всегда можете использовать макрос, как это:

#define swap(a,b) a=a^b; \
                  b=a^b; \
                  a=b^a;
...