#include <stdio.h>
#include <stdlib.h>
struct mystuff {
int a;
int b;
int c;
};
#define declare_getstuff_for(f) int* get_mystuff_##f(struct mystuff *array, int n) \
{ \
int i; \
int *a_array; \
\
a_array = malloc(n*sizeof(int)); \
\
for(i=0;i<n;i++) { \
a_array[i] = array[i].f; \
} \
return a_array; \
}
declare_getstuff_for(a)
declare_getstuff_for(b)
declare_getstuff_for(c)
int main(void) {
int *result1, *result2, *result3;
struct mystuff array[3];
struct mystuff el1, el2, el3;
el1.a = el1.b = el1.c = 1;
el2.a = el2.b = el2.c = 5;
el3.a = el3.b = el3.c = 3;
array[0] = el1;
array[1] = el2;
array[2] = el3;
result1 = get_mystuff_a(array, 3);
printf("%d, %d, %d\n", result1
[0], result1
[1], result1
[2]);
result2 = get_mystuff_b(array, 3);
printf("%d, %d, %d\n", result2
[0], result2
[1], result2
[2]);
result3 = get_mystuff_c(array, 3);
printf("%d, %d, %d\n", result3
[0], result3
[1], result3
[2]);
// Now free your memory :)
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdGRsaWIuaD4KCnN0cnVjdCBteXN0dWZmIHsKICAgIGludCBhOwogICAgaW50IGI7CiAgICBpbnQgYzsKfTsKCiNkZWZpbmUgZGVjbGFyZV9nZXRzdHVmZl9mb3IoZikgaW50KiBnZXRfbXlzdHVmZl8jI2Yoc3RydWN0IG15c3R1ZmYgKmFycmF5LCBpbnQgbikgXAp7IFwKICAgIGludCBpOyBcCiAgICBpbnQgKmFfYXJyYXk7IFwKXAogICAgYV9hcnJheSA9IG1hbGxvYyhuKnNpemVvZihpbnQpKTsgXApcCiAgICBmb3IoaT0wO2k8bjtpKyspIHsgXAogICAgICAgIGFfYXJyYXlbaV0gPSBhcnJheVtpXS5mOyAgXAogICAgfSAgXAogICAgcmV0dXJuIGFfYXJyYXk7IFwKfQoKZGVjbGFyZV9nZXRzdHVmZl9mb3IoYSkKZGVjbGFyZV9nZXRzdHVmZl9mb3IoYikKZGVjbGFyZV9nZXRzdHVmZl9mb3IoYykKCgppbnQgbWFpbih2b2lkKSB7CglpbnQgKnJlc3VsdDEsICpyZXN1bHQyLCAqcmVzdWx0MzsKCXN0cnVjdCBteXN0dWZmIGFycmF5WzNdOwoJc3RydWN0IG15c3R1ZmYgZWwxLCBlbDIsIGVsMzsKCWVsMS5hID0gZWwxLmIgPSBlbDEuYyA9IDE7CgllbDIuYSA9IGVsMi5iID0gZWwyLmMgPSA1OwoJZWwzLmEgPSBlbDMuYiA9IGVsMy5jID0gMzsKCQoJYXJyYXlbMF0gPSBlbDE7CglhcnJheVsxXSA9IGVsMjsKCWFycmF5WzJdID0gZWwzOwoJCglyZXN1bHQxID0gZ2V0X215c3R1ZmZfYShhcnJheSwgMyk7CglwcmludGYoIiVkLCAlZCwgJWRcbiIsIHJlc3VsdDFbMF0sIHJlc3VsdDFbMV0sIHJlc3VsdDFbMl0pOwoJCglyZXN1bHQyID0gZ2V0X215c3R1ZmZfYihhcnJheSwgMyk7CglwcmludGYoIiVkLCAlZCwgJWRcbiIsIHJlc3VsdDJbMF0sIHJlc3VsdDJbMV0sIHJlc3VsdDJbMl0pOwoJCglyZXN1bHQzID0gZ2V0X215c3R1ZmZfYyhhcnJheSwgMyk7CglwcmludGYoIiVkLCAlZCwgJWRcbiIsIHJlc3VsdDNbMF0sIHJlc3VsdDNbMV0sIHJlc3VsdDNbMl0pOwoJCgkvLyBOb3cgZnJlZSB5b3VyIG1lbW9yeSA6KQoJCglyZXR1cm4gMDsKfQo=