#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(testlen, test);
    //ARRAY_LENGTH(testlen2, test2);
    //ARRAY_LENGTH(testlen3, test3);
    
    printf("%d\n", testlen);

    return 0;
}