#include #include #include #define N_ELEMENTS(arr) (sizeof(arr) / sizeof(arr[0])) #define ADD5(x) (x + 5) #define N_ELEMENTS_SAFE(arr) \ ((sizeof(arr) == sizeof(void*) && \ (size_t)arr - (size_t)&main < 0x7fffffff0000 )? \ 0 == printf("Error\n") : (sizeof(arr) / sizeof(arr[0]))) #define FOREACH(arr, fun) \ for(int i = 0; i < N_ELEMENTS_SAFE(arr); i++) \ fun(arr[i]) int main(){ int A[] = {9, 7, 5, 3, 1}; for(int i = 0; i < N_ELEMENTS_SAFE(A); i++){ printf("%d\n", A[i]); } printf("(15 + 5) / 10 = %d\n", ADD5(15) / 10); int *hA = malloc(5 * sizeof(int)); memcpy(hA, A, sizeof(A)); hA[2] = 400; for(int i = 0; i < N_ELEMENTS_SAFE(hA); i++){ printf("%d\n", hA[i]); } void a_fun(int p){ while(p--) printf("*"); printf("\n"); } FOREACH(A, a_fun); return 0; }