배열의 크기를 미리 define 하여 사용하는 것은 좀 너저분하다.


sizeof(array) / sizeof(array[0]) 을 이용하여도 되지만, 이것은 배열이 아닌 포인터에도 코드가 돌아가며 오동작을 할 수 있다.


다음은 template 을 이용하여 컴파일러가 컴파일 할 때

같은 개수의 char 배열을 반환하는 형태의 내용없는 함수를 만들어 (반환값이 중요한게 아니라 내용이 없어도 된다.)

sizeof 를 수행하는 방식으로 개수를 알아내는 코드이다.

포인터에 사용하면 컴파일 오류가 날 것이다.


template <typename T, size_t S>

char (&ArraySizeHelper(T (&)[S]))[S];

#define countof(A) (sizeof(ArraySizeHelper(A)))


+ Recent posts