fork download
  1. #define WORD_SIZE sizeof(int)
  2. #define WORD_MASK (WORD_SIZE - 1)
  3.  
  4. #define BYTE_COPY_FORWARD *d = *s; s++; d++; c--;
  5. #define WORD_COPY_FORWARD *(int *)d = *(int *)s; s += WORD_SIZE; d += WORD_SIZE; c -= WORD_SIZE;
  6.  
  7. #define BYTE_COPY_BACKWARD s--; d--; c--; *d = *s;
  8. #define WORD_COPY_BACKWARD s -= WORD_SIZE; d -= WORD_SIZE; c -= WORD_SIZE;*(int *)d = *(int *)s;
  9.  
  10.  
  11. void MemoryMove(void *destination, const void *source, size_t count)
  12. {
  13. if (count <= 0 || destination == source) return;
  14.  
  15. register char *d = (char *)destination;
  16. register const char *s = (char *)source;
  17. register size_t c = count;
  18.  
  19. if (source > destination) {
  20. while ((int)s & WORD_MASK && c > 0) { BYTE_COPY_FORWARD; }
  21. while (c >= WORD_SIZE) { WORD_COPY_FORWARD; }
  22. while (c > 0) { BYTE_COPY_FORWARD; }
  23. }
  24. else {
  25. s += c;
  26. d += c;
  27. while ((int)s & WORD_MASK && c > 0) { BYTE_COPY_BACKWARD; }
  28. while (c >= WORD_SIZE) { WORD_COPY_BACKWARD; }
  29. while (c > 0) { BYTE_COPY_BACKWARD; }
  30. }
  31.  
  32. }
Compilation error #stdin compilation error #stdout 0s 0KB
stdin
Standard input is empty
compilation info
prog.c:11:56: error: unknown type name 'size_t'
 void MemoryMove(void *destination, const void *source, size_t count)
                                                        ^
stdout
Standard output is empty