#include <stdio.h>
#define I_HATE_MACRO2(a, b) a ## b
#define I_HATE_MACRO(a, b) I_HATE_MACRO2(a, b)
#define ARRAY_LENGTH(len, a) \
typedef struct { \
int I_HATE_MACRO(must_be_an_array_,__LINE__) : ((void*)&(a) == (void*)(a)); \
} I_HATE_MACRO(must_be_an_array_,__LINE__); \
const size_t len = sizeof(a) / sizeof(a[0]);
int main() {
int test[] = {1,2,3};
int test2;
int *test3;
ARRAY_LENGTH(testlen, test);
//ARRAY_LENGTH(testlen2, test2);
//ARRAY_LENGTH(testlen3, test3);
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CgojZGVmaW5lIElfSEFURV9NQUNSTzIoYSwgYikgYSAjIyBiCiNkZWZpbmUgSV9IQVRFX01BQ1JPKGEsIGIpIElfSEFURV9NQUNSTzIoYSwgYikKI2RlZmluZSBBUlJBWV9MRU5HVEgobGVuLCBhKSBcCiAgICB0eXBlZGVmIHN0cnVjdCB7IFwKICAgICAgICBpbnQgSV9IQVRFX01BQ1JPKG11c3RfYmVfYW5fYXJyYXlfLF9fTElORV9fKSA6ICgodm9pZCopJihhKSA9PSAodm9pZCopKGEpKTsgXAogICAgfSBJX0hBVEVfTUFDUk8obXVzdF9iZV9hbl9hcnJheV8sX19MSU5FX18pOyBcCiAgICBjb25zdCBzaXplX3QgbGVuID0gc2l6ZW9mKGEpIC8gc2l6ZW9mKGFbMF0pOwoKaW50IG1haW4oKSB7CiAgICBpbnQgdGVzdFtdID0gezEsMiwzfTsKICAgIGludCB0ZXN0MjsKICAgIGludCAqdGVzdDM7CgogICAgQVJSQVlfTEVOR1RIKHRlc3RsZW4sIHRlc3QpOwogICAgLy9BUlJBWV9MRU5HVEgodGVzdGxlbjIsIHRlc3QyKTsKICAgIC8vQVJSQVlfTEVOR1RIKHRlc3RsZW4zLCB0ZXN0Myk7CiAgICAKICAgIHByaW50ZigiJWRcbiIsIHRlc3RsZW4pOwoKICAgIHJldHVybiAwOwp9