在 Android 的 NDK 下,不方便调试,记录log是个好方法。 android/log.h 中有3个记录log的函数,其中__android_log_print(int priority, const char* tag, const char* fmt, ...); 一般情况下,我们都是在debug模式下记录log,而在release模式下,不记录,我们一般使用宏来实现这样的功能。 在release模式下,定义NDEBUG宏,而debug模式下不定义,这样我们可以通过该宏是否定义来设置是否记录log。但是C99之前,“...”这个不定参数只能用在函数,宏不能使用。有了C99,我们可以顺利地使用了。 #ifndef NDEBUG #define LOG(priority, tag, fmt, ...) __android_log_print(priority, tag, fmt, __VA_ARGS__) #else #define LOG(priority, tag, fmt, ...) ((void)(0)) #endif 但是在gcc下,如果调用的时候没有后面的可变参数,会编译错误,而 VC9 不会。gcc做了扩展可以使用##来消除这个错误,也就是改成这样:#define LOG(priority, tag, fmt, ...) __android_log_print(priority, tag, fmt, ##__VA_ARGS__) 这样,无论VC还是gcc,都可以编译过了。 不过我是在 .cpp 中使用gcc编译的,不知道在 .c 中,不使用 -std=c99 能否编译通过。 |
|