#include #include #include #include __attribute__((ms_abi)) void *memmove(void *, const void *, size_t); __attribute__((ms_abi)) void *memset(void *, int, size_t); void output_memmove(const char *str) { puts(str); } int main(void) { char str[] = "1234567890"; puts(str); memmove(str + 4, str + 3, 3); // copy from [4,5,6] to [5,6,7] puts(str); memmove(str + 3, str + 4, 3); // copy from [4,5,6] to [5,6,7] puts(str); memset(str + 3, '0' + 7, 3); puts(str); for (int i = 0; i <= 10; i++) printf("str[%d]=%d (%c)\n", i, str[i], str[i]); // setting effective type of allocated memory to be int int *p = malloc(3 * sizeof(int)); // allocated memory has no effective type int arr[3] = {1, 2, 3}; memmove(p, arr, 3 * sizeof(int)); // allocated memory now has an effective type printf("%d %d %d\n", p[0], p[1], p[2]); // reinterpreting data double d = 0.1; // int64_t n = *(int64_t*)(&d); // strict aliasing violation int64_t n; memmove(&n, &d, sizeof d); // OK printf("%a is %" PRIx64 " as an int64_t\n", d, n); }