title: A #define in C with three dots
body: <pre><code>#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__))
  </code></pre>
  
  <p>This is definition for these 2 macros; later in the code <code>LOGI</code> and <code>LOGW</code> are used this way</p>
  
  <pre><code>LOGI("accelerometer: x=%f y=%f z=%f",
                                  event.acceleration.x, event.acceleration.y,
                                  event.acceleration.z);
  </code></pre>
  
  <p>and this way</p>
  
  <pre><code>LOGW("Unable to eglMakeCurrent");
  </code></pre>
  
  <p>Since I try to avoid complex macros and <code>#define</code> in general, I can't get what this macro actually means.  What is the role for the 3 dots notation here? What does this <code>#define</code> change later in the code?</p>
  
  <p>Obviously I know that the 3 dots are used to indicate and indefinite amount of arguments, but I don't know how to read this situation.</p>