#include <stdio.h>
#include <stddef.h>
#define LENGTH(ARRAY) (sizeof(ARRAY)/sizeof((ARRAY)[0]))
#define arr(NAME, TYPE, ...) \
TYPE *NAME =\
((struct {\
size_t n;\
TYPE u[LENGTH(((TYPE []){__VA_ARGS__}))];\
}){\
.n = LENGTH(((TYPE []){__VA_ARGS__})),\
.u = {__VA_ARGS__}\
}).u
#define len(ARRAY) \
*(size_t *)(void *)((char *)&ARRAY[0]-offsetof(struct {size_t n; void *u;}, u))
struct xy {
int x;
int y;
};
static void print_array(struct xy *a)
{
for (size_t i = 0; i < len(a); ++i) {
printf("(%d, %d) ", a
[i
].
x, a
[i
].
y); }
printf("\nThe size of this array is %zu\n", len
(a
)); return;
}
int main(void)
{
arr(points, struct xy, {12, 34}, {56, 78}, {11, 99});
print_array(points);
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdGRkZWYuaD4KCiNkZWZpbmUgTEVOR1RIKEFSUkFZKSAoc2l6ZW9mKEFSUkFZKS9zaXplb2YoKEFSUkFZKVswXSkpCgojZGVmaW5lIGFycihOQU1FLCBUWVBFLCAuLi4pIFwKVFlQRSAqTkFNRSA9XAooKHN0cnVjdCB7XAoJc2l6ZV90IG47XAoJVFlQRSB1W0xFTkdUSCgoKFRZUEUgW10pe19fVkFfQVJHU19ffSkpXTtcCn0pe1wKCS5uID0gTEVOR1RIKCgoVFlQRSBbXSl7X19WQV9BUkdTX199KSksXAoJLnUgPSB7X19WQV9BUkdTX199XAp9KS51CgojZGVmaW5lIGxlbihBUlJBWSkgXAoqKHNpemVfdCAqKSh2b2lkICopKChjaGFyICopJkFSUkFZWzBdLW9mZnNldG9mKHN0cnVjdCB7c2l6ZV90IG47IHZvaWQgKnU7fSwgdSkpCgpzdHJ1Y3QgeHkgewoJaW50IHg7CglpbnQgeTsKfTsKCnN0YXRpYyB2b2lkIHByaW50X2FycmF5KHN0cnVjdCB4eSAqYSkKewoJZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsZW4oYSk7ICsraSkgewoJCXByaW50ZigiKCVkLCAlZCkgIiwgYVtpXS54LCBhW2ldLnkpOwoJfQoJcHJpbnRmKCJcblRoZSBzaXplIG9mIHRoaXMgYXJyYXkgaXMgJXp1XG4iLCBsZW4oYSkpOwoJcmV0dXJuOwp9CgppbnQgbWFpbih2b2lkKQp7CglhcnIocG9pbnRzLCBzdHJ1Y3QgeHksIHsxMiwgMzR9LCB7NTYsIDc4fSwgezExLCA5OX0pOwoJcHJpbnRfYXJyYXkocG9pbnRzKTsKCXJldHVybiAwOwp9