#include <stdio.h>
#define ASIZE(a) (sizeof (a) / sizeof((a)[0]))
#define CHECK_ARRAY(a) ((void)(0&&((int (*)(__typeof__(a[0])(*)[ASIZE(a)]))NULL)(&(a))))
#define ASIZE_SAFE(a) (CHECK_ARRAY(a), ASIZE(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("ASIZE() accepts pointers, producing invalid results.\n"); printf("ASIZE_SAFE() only accepts arrays (try uncommenting).\n"); printf("%zu\n", ASIZE_SAFE
( a
)); //printf("%zu\n", ASIZE_SAFE( b ));
printf("%zu\n", ASIZE_SAFE
( c
)); //printf("%zu\n", ASIZE_SAFE( d ));
printf("%zu\n", ASIZE_SAFE
( e
)); //printf("%zu\n", ASIZE_SAFE( f ));
//printf("%zu\n", ASIZE_SAFE( g ));
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CgojZGVmaW5lIEFTSVpFKGEpIChzaXplb2YgKGEpIC8gc2l6ZW9mKChhKVswXSkpCgojZGVmaW5lIENIRUNLX0FSUkFZKGEpICgodm9pZCkoMCYmKChpbnQgKCopKF9fdHlwZW9mX18oYVswXSkoKilbQVNJWkUoYSldKSlOVUxMKSgmKGEpKSkpCgojZGVmaW5lIEFTSVpFX1NBRkUoYSkgKENIRUNLX0FSUkFZKGEpLCBBU0laRShhKSkKCmludCBtYWluKHZvaWQpCnsKCXNob3J0IGFbM107CglzaG9ydCAqYjsKCWludCBjWzJdOwoJaW50ICpkOwoJbG9uZyBsb25nIGVbNV1bNF07CgljaGFyICpmWzRdOwoJY2hhciAoKmcpWzRdOwoJKHZvaWQpYTsgKHZvaWQpYjsgKHZvaWQpYzsgKHZvaWQpZDsgKHZvaWQpZTsgKHZvaWQpZjsgKHZvaWQpZzsKCXByaW50ZigiQVNJWkUoKSBhY2NlcHRzIHBvaW50ZXJzLCBwcm9kdWNpbmcgaW52YWxpZCByZXN1bHRzLlxuIik7CglwcmludGYoIiV6dVxuIiwgQVNJWkUoIGEgKSk7CglwcmludGYoIiV6dVxuIiwgQVNJWkUoIGIgKSk7CglwcmludGYoIiV6dVxuIiwgQVNJWkUoIGMgKSk7CglwcmludGYoIiV6dVxuIiwgQVNJWkUoIGQgKSk7CglwcmludGYoIiV6dVxuIiwgQVNJWkUoIGUgKSk7CglwcmludGYoIiV6dVxuIiwgQVNJWkUoIGYgKSk7CglwcmludGYoIiV6dVxuIiwgQVNJWkUoIGcgKSk7CglwcmludGYoIkFTSVpFX1NBRkUoKSBvbmx5IGFjY2VwdHMgYXJyYXlzICh0cnkgdW5jb21tZW50aW5nKS5cbiIpOwoJcHJpbnRmKCIlenVcbiIsIEFTSVpFX1NBRkUoIGEgKSk7CgkvL3ByaW50ZigiJXp1XG4iLCBBU0laRV9TQUZFKCBiICkpOwoJcHJpbnRmKCIlenVcbiIsIEFTSVpFX1NBRkUoIGMgKSk7CgkvL3ByaW50ZigiJXp1XG4iLCBBU0laRV9TQUZFKCBkICkpOwoJcHJpbnRmKCIlenVcbiIsIEFTSVpFX1NBRkUoIGUgKSk7CgkvL3ByaW50ZigiJXp1XG4iLCBBU0laRV9TQUZFKCBmICkpOwoJLy9wcmludGYoIiV6dVxuIiwgQVNJWkVfU0FGRSggZyApKTsKCXJldHVybiAwOwp9Cg==