Android NDK.#define LOGI(...)是什么意思.并且很少有基本问题

buk*_*.wh 1 c++ android android-ndk

我是NDK的新手,但我成功地完成了一些基本的练习,但我想问一些简单的问题(基本上,我理解这意味着什么,但我想确信它是正确的).这是代码,任何人都可以解释每行的含义:

#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
Run Code Online (Sandbox Code Playgroud)

非常非常感谢你!

laa*_*lto 5

它们都是C预处理程序指令.

#ifdef __ANDROID__
...
#endif
Run Code Online (Sandbox Code Playgroud)

仅在__ANDROID__定义了预处理程序符号时才会处理此部分.

#define LOG_TAG "MyNative"
Run Code Online (Sandbox Code Playgroud)

这定义了一个LOG_TAG扩展为的宏"MyNative".

#define STRINGIFY(x) #x
Run Code Online (Sandbox Code Playgroud)

这定义了一个宏STRINGIFY,它接受一个参数x并将其转换为字符串文字#.

#define LOG_TAG    __FILE__ ":" STRINGIFY(__MyNative__)
Run Code Online (Sandbox Code Playgroud)

这定义了一个宏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__)
Run Code Online (Sandbox Code Playgroud)

这些定义了两个接受可变数量参数的宏(...).扩展宏,以便__VA_ARGS__将可变数量的参数替换为逗号分隔列表.__android_log_print()是一个C varargs函数(如printf()),它接受可变数量的args.