#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__))

这是这两个宏的定义;稍后在代码LOGILOGW中以这种方式使用
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节:



...



在下一个小节中:



因此,您可以使用任意多个参数调用LOGILOGW,它们都将通过引用__VA_ARGS__在定义中指定的位置扩展。

10-06 02:06