#define LOGI(...) ((void)__android_log_print(ANDROID_LOG_INFO, "native-activity", __VA_ARGS__))
#define LOGW(...) ((void)__android_log_print(ANDROID_LOG_WARN, "native-activity", __VA_ARGS__))
这是这两个宏的定义;稍后在代码
LOGI
和LOGW
中以这种方式使用LOGI("accelerometer: x=%f y=%f z=%f",
event.acceleration.x, event.acceleration.y,
event.acceleration.z);
这样
LOGW("Unable to eglMakeCurrent");
由于我通常会尽量避免使用复杂的宏和
#define
,因此我无法理解该宏的实际含义。这三个点符号的作用是什么?此#define
稍后在代码中会发生什么变化?显然,我知道这3个点用于表示和确定数量的参数,但是我不知道如何阅读这种情况。
最佳答案
C99标准引入了可变参数宏,即可以接受可变数量参数的类函数宏。
引用C标准的latest draft,第6.10.3节:
...
在下一个小节中:
因此,您可以使用任意多个参数调用LOGI
或LOGW
,它们都将通过引用__VA_ARGS__
在定义中指定的位置扩展。