Android NDK - stddef.h 대신 stdlib.h 를 사용하세요
Android NDK - stddef.h 대신 stdlib.h 를 사용하세요 NDK 로 프로젝트를 진행하다 보니, wchar_t 근처에서 계속 삐걱거리는 소리가 들립니다. 오래 전에 NDK 에서 wchar_t 을 사용하지 말라는 내용의 포스트를 올린 적이 있습니다. 이 경고는 지금도 API 레벨 8까지는 여전히 유효합니다. API 레벨 8 에 대한 개발자들의 관심은 가까운 미래에 사라지고 말겠지만 당장은 걸리적거립니다. NDK r8b 를 사용해서 Autoconf 와 비슷한 방식의 테스트를 모든 API 레벨에 대해 수행할 일이 있었습니다. 그런데 stddef.h 가 예상과는 다른 방식으로 반응하는 겁니다. 모든 API 레벨에서 wchar_t 이 멀티바이트로 정의된 것처럼 보인다는 것이지요. 그 크기도 L'a' 와 동일하게 4바이트로 정의되어있습니다. API 레벨 8 이하의 Bionic 런타임은 1 바이트 wchar_t 을 사용하고 있으니, 전보다 나쁜 소식입니다. 헤더를 살펴보니 stddef.h 에 오류가 있습니다. sys/cdefs.h, wchar.h, stdlib.h 등을 먼저 #include 하면 정상적으로 정의가 됩니다만, stddef.h 를 먼저 #include 하면 잘못된 정의가 적용되고 있습니다. 혹 stddef.h 를 사용해야 할 일이 있으면 stdlib.h 를 먼저 #include 하거나, 그냥 stdlib.h 를 대신 사용하는 것이 좋을듯합니다.