fork download
  1. #include <assert.h>
  2. #include <stdio.h>
  3. #include <string.h>
  4.  
  5. #define yoba_swap(foo, bar) do { \
  6.   char temp[sizeof(foo)]; \
  7.   assert(sizeof(foo) == sizeof(bar)); \
  8.   memcpy(&temp, &foo, sizeof(foo)); \
  9.   memcpy(&foo, &bar, sizeof(foo)); \
  10.   memcpy(&bar, &temp, sizeof(foo)); \
  11. } while (0)
  12.  
  13.  
  14. int main(void)
  15. {
  16. printf("Arrays:\n");
  17. int a1[3] = { 1, 2, 3 };
  18. int a2[3] = { 4, 5, 6 };
  19. printf("Before: a1 = { %d, %d, %d }; a2 = { %d, %d, %d }\n", a1[0], a1[1], a1[2], a2[0], a2[1], a2[2]);
  20. yoba_swap(a1, a2);
  21. printf("After: a1 = { %d, %d, %d }; a2 = { %d, %d, %d }\n", a1[0], a1[1], a1[2], a2[0], a2[1], a2[2]);
  22. printf("Single values:\n");
  23. double d1 = 1.0;
  24. double d2 = 2.0;
  25. printf("Before: d1 = %g, d2 = %g\n", d1, d2);
  26. yoba_swap(d1, d2);
  27. printf("After: d1 = %g, d2 = %g\n", d1, d2);
  28. }
  29.  
Success #stdin #stdout 0s 10304KB
stdin
Standard input is empty
stdout
Arrays:
Before: a1 = { 1, 2, 3 }; a2 = { 4, 5, 6 }
After:  a1 = { 4, 5, 6 }; a2 = { 1, 2, 3 }
Single values:
Before: d1 = 1, d2 = 2
After:  d1 = 2, d2 = 1