|
在 Android 的 NDK 下,不方便調(diào)試,記錄log是個(gè)好方法。 android/log.h 中有3個(gè)記錄log的函數(shù),其中__android_log_print(int priority, const char* tag, const char* fmt, ...); 一般情況下,我們都是在debug模式下記錄log,而在release模式下,不記錄,我們一般使用宏來(lái)實(shí)現(xiàn)這樣的功能。 在release模式下,定義NDEBUG宏,而debug模式下不定義,這樣我們可以通過(guò)該宏是否定義來(lái)設(shè)置是否記錄log。但是C99之前,“...”這個(gè)不定參數(shù)只能用在函數(shù),宏不能使用。有了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下,如果調(diào)用的時(shí)候沒(méi)有后面的可變參數(shù),會(huì)編譯錯(cuò)誤,而 VC9 不會(huì)。gcc做了擴(kuò)展可以使用##來(lái)消除這個(gè)錯(cuò)誤,也就是改成這樣:#define LOG(priority, tag, fmt, ...) __android_log_print(priority, tag, fmt, ##__VA_ARGS__) 這樣,無(wú)論VC還是gcc,都可以編譯過(guò)了。 不過(guò)我是在 .cpp 中使用gcc編譯的,不知道在 .c 中,不使用 -std=c99 能否編譯通過(guò)。 |
|
|