디버그 on/off에 따라 자료형을 다르게 하는 방법

원래 이렇게 해야하는걸

static const RegJNIRec gRegJNI[] = {
    { 엄청나게 긴 함수명, "엄청나게 긴 함수명" },
    ...
}

요렇게 하면!

#ifdef NDEBUG
    #define REG_JNI(name)      { name }
    struct RegJNIRec {
        int (*mProc)(JNIEnv*);
    };
#else
    #define REG_JNI(name)      { name, #name }
    struct RegJNIRec {
        int (*mProc)(JNIEnv*);
        const char* mName;
    };
#endif

static const RegJNIRec gRegJNI[] = {
    REG_JNI(register_com_android_internal_os_RuntimeInit),
    ...
};

static int register_jni_procs(const RegJNIRec array[], size_t count, JNIEnv* env)
{
    for (size_t i = 0; i < count; i++) {
        if (array[i].mProc(env) < 0) {
#ifndef NDEBUG
            ALOGD("----------!!! %s failed to load\n", array[i].mName);
#endif
            return -1;
        }
    }
    return 0;
}

깔끔하다 perfect


출처

android/frameworks/base/core/jni/AndroidRuntime.cpp


'devel > code' 카테고리의 다른 글

argument parsing  (0) 2017.02.17
Unnamed Structure and Union Fields - 이름없는 구조체  (0) 2016.12.20
bus_for_each_dev - while 조건문  (0) 2016.10.10
구조체 선언 없이 값 리턴  (0) 2016.04.29
script ㅎㄸㄸ  (0) 2015.08.27
Posted by 쵸코케키

블로그 이미지
chocokeki
쵸코케키

공지사항

Yesterday
Today
Total

달력

 « |  » 2024.4
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30

최근에 올라온 글

최근에 달린 댓글

글 보관함