#include <stdio.h>
#include <stdint.h>

#define foreach(a, b)\
for(typeof(*(b)) * _shit_begin = (b), * _shit_end = ((_shit_begin) + sizeof((b))/sizeof(*(b))), * (a) = _shit_begin; (a) != _shit_end; ++(a))
  
int main(void) {
{
  uint32_t vec[6][3] = {
      {10, 11, 12},
      {20, 21, 22},
      {30, 31, 32},
      {40, 41, 42},
      {50, 51, 52},
      {60, 61, 62},
  };
  foreach(it, vec[2])
    fprintf(stderr, "%u\n", *it);
}
{
  uint32_t vec[] = {0, 1, 2, 3, 4, 5};
  foreach(it, vec)
    fprintf(stderr, "%u\n", *it);
}
{
  uint8_t vec[] = {0, 1, 2, 3, 4, 5};
  foreach(it, vec)
    fprintf(stderr, "%u\n", *it);
}
{
  uint64_t vec[] = {0, 1, 2, 3, 4, 5};
  foreach(it, vec)
    fprintf(stderr, "%lu\n", *it);
}
  return 0;
}