#include <stdlib.h>
#include <stdio.h>
#include <stddef.h>
#include <unistd.h>
#include <string.h>
#include <inttypes.h>

#define setarr(a)  [sizeof(a)-1] = (a) // remove NULL from end of string

// Осторожно, говномакросы

#define assign_1(a,begin)\
{\
  typeof (begin) m_cnt = begin;\
  a = (typeof (a))(*m_cnt);\
}\

#define assign_2(a,b,begin)\
{\
  typeof (begin) m_cnt = begin;\
  a = (typeof (a))(m_cnt);\
  m_cnt += sizeof(a);\
  b = (typeof (b))(m_cnt);\
}\

#define assign_3(a,b,c,begin)\
{\
  typeof (begin) m_cnt = begin;\
  a = (typeof (a))(m_cnt);\
  m_cnt += sizeof(a);\
  b = (typeof (b))(m_cnt);\
  m_cnt += sizeof(b);\
  b = (typeof (c))(m_cnt);\
}\



void I_print(void* data)
{
  size_t* s_sz; // = data;
  uint8_t*  s_data; // = data+sizeof(*s_sz);
  assign_2(s_sz,s_data,data)
  write(1, s_data, *s_sz);
}

void* I_pr[1000];
void** I_pr_ptr = I_pr;

int main(void)
{
  const uint8_t word setarr("Hello, World\n");
  void* a = malloc(sizeof(size_t) +
                   sizeof(uint8_t)*sizeof(word) );
  {
    size_t* tmp = a;
    *tmp = sizeof(word);
  }

  memcpy (a+(sizeof(size_t)), word, sizeof(word));
  
  
  I_print(a);
  return 0;
}
