#include <stdio.h>
#define ASIZE(a) (sizeof (a) / sizeof((a)[0]))
#define GET_COMPATIBLE_ARRAY_PTR_TYPE( a ) __typeof__((a)[0])(*)[ASIZE(a)]
#define GET_CHECKING_FUNC_PTR_TYPE( a ) int (*)(GET_COMPATIBLE_ARRAY_PTR_TYPE( a ))
#define CHECK_ARRAY(a) ((void)(0&&((GET_CHECKING_FUNC_PTR_TYPE( a ))NULL)(&(a))))
int main(void)
{
short a[3];
short *b;
int c[2];
int *d;
long long e[5][4];
char *f[4];
char (*g)[4];
(void)a; (void)b; (void)c; (void)d; (void)e; (void)f; (void)g;
printf("CHECK_ARRAY() only 'accepts' arrays (try uncommenting).\n"); CHECK_ARRAY( a );
//CHECK_ARRAY( b );
CHECK_ARRAY( c );
//CHECK_ARRAY( d );
CHECK_ARRAY( e );
//CHECK_ARRAY( f );
//CHECK_ARRAY( g );
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiAKI2RlZmluZSBBU0laRShhKSAoc2l6ZW9mIChhKSAvIHNpemVvZigoYSlbMF0pKQojZGVmaW5lIEdFVF9DT01QQVRJQkxFX0FSUkFZX1BUUl9UWVBFKCBhICkgX190eXBlb2ZfXygoYSlbMF0pKCopW0FTSVpFKGEpXQojZGVmaW5lIEdFVF9DSEVDS0lOR19GVU5DX1BUUl9UWVBFKCBhICkgaW50ICgqKShHRVRfQ09NUEFUSUJMRV9BUlJBWV9QVFJfVFlQRSggYSApKQojZGVmaW5lIENIRUNLX0FSUkFZKGEpICgodm9pZCkoMCYmKChHRVRfQ0hFQ0tJTkdfRlVOQ19QVFJfVFlQRSggYSApKU5VTEwpKCYoYSkpKSkKCmludCBtYWluKHZvaWQpCnsKCXNob3J0IGFbM107CglzaG9ydCAqYjsKCWludCBjWzJdOwoJaW50ICpkOwoJbG9uZyBsb25nIGVbNV1bNF07CgljaGFyICpmWzRdOwoJY2hhciAoKmcpWzRdOwoJKHZvaWQpYTsgKHZvaWQpYjsgKHZvaWQpYzsgKHZvaWQpZDsgKHZvaWQpZTsgKHZvaWQpZjsgKHZvaWQpZzsKCXByaW50ZigiQ0hFQ0tfQVJSQVkoKSBvbmx5ICdhY2NlcHRzJyBhcnJheXMgKHRyeSB1bmNvbW1lbnRpbmcpLlxuIik7CglDSEVDS19BUlJBWSggYSApOwoJLy9DSEVDS19BUlJBWSggYiApOwoJQ0hFQ0tfQVJSQVkoIGMgKTsKCS8vQ0hFQ0tfQVJSQVkoIGQgKTsKCUNIRUNLX0FSUkFZKCBlICk7CgkvL0NIRUNLX0FSUkFZKCBmICk7CgkvL0NIRUNLX0FSUkFZKCBnICk7CglyZXR1cm4gMDsKfQo=