assert() 작성
2009/08/01 23:09C언어에는 assert.h 에 정의된, assert()가 있다. 어제, 안드로이드 NDK 1.5를 이용하던 중에, NDK에서 사용된 assert()의 결과가 logcat에 나오질 않아서, 표준출력이 아닌 안드로이드 로그에 내용을 뿌리는 ASSERT()를 새로 만들었다. # 연산자를 이용했다.
// Header
#ifndef NO_ASSERT
#define ASSERT(e) ((void)0)
#else
#define ASSERT(e) ((e)?(void)0:_my_assert(#e, __FILE__, __LINE__))
#endif//NO_ASSERT
// Implementation
#include "android/log.h"
void _my_assert(const char* str_exp, const char* file, int line) {
__android_log_print(ANDROID_LOG_ERROR, "ASSERT FAILED!", "(%s:%d): `%s`", file, line, str_exp);
}
__android_log_print를 실행한 후에, 프로세스를 종료하는 것이 맞겠지만, 아직, NDK쪽에서 프로세스를 종료하는 방법을 알아내질 못했다. libc의 exit()는 에러가 발생한다. 만약, 방법이 없다면, JNI를 이용해서 java.lang.System.exit()를 호출하는 수 밖에 없을지도.
-- 이상한 나라의 종텐.

