2014-01-10 58 views
1

我是NDK的新手,但我成功完成了一些基本的示例,但我想問一些簡單的問題(基本上,我理解它的含義,但我想確信它的正確性)。這裏是代碼,任何人都可以解釋每條線的含義:Android NDK。 #define LOGI(...)是什麼意思。和幾個基本問​​題

#ifdef __ANDROID__ 
#define LOG_TAG "MyNative" 
#define STRINGIFY(x) #x 
#define LOG_TAG __FILE__ ":" STRINGIFY(__MyNative__) 
#define LOGI(...) __android_log_print(ANDROID_LOG_INFO,LOG_TAG,__VA_ARGS__) 
#define LOGE(...) __android_log_print(ANDROID_LOG_ERROR,LOG_TAG,__VA_ARGS__) 
#endif 

非常感謝!

回答

5

它們都是C預處理指令。

#ifdef __ANDROID__ 
... 
#endif 

該零件,如果預處理器符號__ANDROID__被定義僅處理。

#define LOG_TAG "MyNative" 

這定義了宏LOG_TAG展開至"MyNative"

#define STRINGIFY(x) #x 

這定義了宏STRINGIFY在一個需要參數x並將其變爲一個字符串與#

#define LOG_TAG __FILE__ ":" STRINGIFY(__MyNative__) 

定義一個宏LOG_TAG一個可擴展到三個字符串(即自動被連接在一起)。 __FILE__是擴展到當前源文件名的內置宏,STRINGIFY(__MyNative__)產生"__MyNative__"

#define LOGI(...) __android_log_print(ANDROID_LOG_INFO,LOG_TAG,__VA_ARGS__) 
#define LOGE(...) __android_log_print(ANDROID_LOG_ERROR,LOG_TAG,__VA_ARGS__) 

這些定義兩個宏採取的參數(...)可變數量。該宏被展開,以便將__VA_ARGS__替換爲可變數量的參數作爲逗號分隔列表。 __android_log_print()是C可變參數函數(如printf()),它接受可變數目的參數。

+0

非常感謝!你幫了我很多! –

相關問題