title: Too many warnings on a C macro
body: <p>I'm trying an approach to flag warnings on my code, but I did some mistake and can't understand where. My compiler gives me too much warnings about each use of this macro:</p>
  
  <pre><code>#define MPL_ERROR_MESSAGE2(output, fmt, ...) fprintf(output, ("\n[ERROR][%s:%d( %s )]\n---  " fmt "  ---\n\n"), __FILE__, __LINE__, __PRETTY_FUNCTION__, ##__VA_ARGS__);
  
  #define MPL_ERROR_MESSAGE(fmt, ...) MPL_ERROR_MESSAGE2(stderr, fmt, ##__VA_ARGS__);
  </code></pre>
  
  <p>Example of use:</p>
  
  <pre><code>MPL_ERROR_MESSAGE("Test %d", 2);
  </code></pre>
  
  <pre> 
  
      In file included from ../trunk/mpl_position.h:5:0,
                       from ../trunk/mpl_baseenvironment.h:6,
                       from ../trunk/mpl_baseenvironment.cpp:1:
      ../trunk/mpl_baseenvironment.cpp: In member function ‘int MPL_BaseEnvironment::getEnemyRobotAt(MPL_Position&, int)’:
      ../trunk/mpl_utils.h:7:167: warning: too many arguments for format [-Wformat-extra-args]
       #define MPL_ERROR_MESSAGE2(output, fmt, ...) fprintf(output, ("\n[ERROR][%s:%d( %s )]\n---  " fmt "  ---\n\n"), __FILE__, __LINE__, __PRETTY_FUNCTION__, ##__VA_ARGS__); //error message
                                                                                                                                                                             ^
      ../trunk/mpl_utils.h:9:37: note: in expansion of macro ‘MPL_ERROR_MESSAGE2’
       #define MPL_ERROR_MESSAGE(fmt, ...) MPL_ERROR_MESSAGE2(stderr, fmt, ##__VA_ARGS__);
                                           ^
      ../trunk/mpl_baseenvironment.cpp:28:9: note: in expansion of macro ‘MPL_ERROR_MESSAGE’
               MPL_ERROR_MESSAGE("(invalid value) not in [0,%d) ", i_ER, qlMPLP_enemyRobot__.size());
               ^
      ../trunk/mpl_baseenvironment.cpp: In member function ‘int MPL_BaseEnvironment::deleteEnemyRobotAt(int)’:
      ../trunk/mpl_utils.h:7:167: warning: too many arguments for format [-Wformat-extra-args]
       #define MPL_ERROR_MESSAGE2(output, fmt, ...) fprintf(output, ("\n[ERROR][%s:%d( %s )]\n---  " fmt "  ---\n\n"), __FILE__, __LINE__, __PRETTY_FUNCTION__, ##__VA_ARGS__); //error message
                                                                                                                                                                             ^
      ../trunk/mpl_utils.h:9:37: note: in expansion of macro ‘MPL_ERROR_MESSAGE2’
       #define MPL_ERROR_MESSAGE(fmt, ...) MPL_ERROR_MESSAGE2(stderr, fmt, ##__VA_ARGS__);
                                           ^
      ../trunk/mpl_baseenvironment.cpp:45:9: note: in expansion of macro ‘MPL_ERROR_MESSAGE’
               MPL_ERROR_MESSAGE("(invalid value) not in [0,%d) ", i_ER, qlMPLP_enemyRobot__.size());
               ^
      ../trunk/mpl_baseenvironment.cpp: In member function ‘int MPL_BaseEnvironment::getMovableObstacleAt(MPL_Position&, int)’:
      ../trunk/mpl_utils.h:7:167: warning: too many arguments for format [-Wformat-extra-args]
       #define MPL_ERROR_MESSAGE2(output, fmt, ...) fprintf(output, ("\n[ERROR][%s:%d( %s )]\n---  " fmt "  ---\n\n"), __FILE__, __LINE__, __PRETTY_FUNCTION__, ##__VA_ARGS__); //error message
                                                                                                                                                                             ^
      ../trunk/mpl_utils.h:9:37: note: in expansion of macro ‘MPL_ERROR_MESSAGE2’
       #define MPL_ERROR_MESSAGE(fmt, ...) MPL_ERROR_MESSAGE2(stderr, fmt, ##__VA_ARGS__
  
  </pre>
  
  <p>EDIT: UPDATED Warnings list</p>
  
  <pre>
  
      ../trunk/mpl_gridenvironment.h: In member function ‘long int MPL_GridEnvironment::arrayIndex(MPL_Position&)’:
      ../trunk/mpl_utils.h:7:167: warning: unknown conversion type character ‘,’ in format [-Wformat=]
       #define MPL_ERROR_MESSAGE2(output, fmt, ...) fprintf(output, ("\n[ERROR][%s:%d( %s )]\n---  " fmt "  ---\n\n"), __FILE__, __LINE__, __PRETTY_FUNCTION__, ##__VA_ARGS__); //error message
                                                                                                                                                                             ^
      ../trunk/mpl_utils.h:9:37: note: in expansion of macro ‘MPL_ERROR_MESSAGE2’
       #define MPL_ERROR_MESSAGE(fmt, ...) MPL_ERROR_MESSAGE2(stderr, fmt, ##__VA_ARGS__);
                                           ^
      ../trunk/mpl_gridenvironment.h:253:9: note: in expansion of macro ‘MPL_ERROR_MESSAGE’
               MPL_ERROR_MESSAGE("Invalid Position at (%l, %l, %l)", x, y, z);
               ^
      ../trunk/mpl_utils.h:7:167: warning: unknown conversion type character ‘,’ in format [-Wformat=]
       #define MPL_ERROR_MESSAGE2(output, fmt, ...) fprintf(output, ("\n[ERROR][%s:%d( %s )]\n---  " fmt "  ---\n\n"), __FILE__, __LINE__, __PRETTY_FUNCTION__, ##__VA_ARGS__); //error message
                                                                                                                                                                             ^
      ../trunk/mpl_utils.h:9:37: note: in expansion of macro ‘MPL_ERROR_MESSAGE2’
       #define MPL_ERROR_MESSAGE(fmt, ...) MPL_ERROR_MESSAGE2(stderr, fmt, ##__VA_ARGS__);
                                           ^
      ../trunk/mpl_gridenvironment.h:253:9: note: in expansion of macro ‘MPL_ERROR_MESSAGE’
               MPL_ERROR_MESSAGE("Invalid Position at (%l, %l, %l)", x, y, z);
               ^
      ../trunk/mpl_utils.h:7:167: warning: unknown conversion type character ‘)’ in format [-Wformat=]
       #define MPL_ERROR_MESSAGE2(output, fmt, ...) fprintf(output, ("\n[ERROR][%s:%d( %s )]\n---  " fmt "  ---\n\n"), __FILE__, __LINE__, __PRETTY_FUNCTION__, ##__VA_ARGS__); //error message
                                                                                                                                                                             ^
      ../trunk/mpl_utils.h:9:37: note: in expansion of macro ‘MPL_ERROR_MESSAGE2’
       #define MPL_ERROR_MESSAGE(fmt, ...) MPL_ERROR_MESSAGE2(stderr, fmt, ##__VA_ARGS__);
                                           ^
      ../trunk/mpl_gridenvironment.h:253:9: note: in expansion of macro ‘MPL_ERROR_MESSAGE’
               MPL_ERROR_MESSAGE("Invalid Position at (%l, %l, %l)", x, y, z);
               ^
      ../trunk/mpl_utils.h:7:167: warning: too many arguments for format [-Wformat-extra-args]
       #define MPL_ERROR_MESSAGE2(output, fmt, ...) fprintf(output, ("\n[ERROR][%s:%d( %s )]\n---  " fmt "  ---\n\n"), __FILE__, __LINE__, __PRETTY_FUNCTION__, ##__VA_ARGS__); //error message
                                                                                                                                                                             ^
      ../trunk/mpl_utils.h:9:37: note: in expansion of macro ‘MPL_ERROR_MESSAGE2’
       #define MPL_ERROR_MESSAGE(fmt, ...) MPL_ERROR_MESSAGE2(stderr, fmt, ##__VA_ARGS__);
                                           ^
      ../trunk/mpl_gridenvironment.h:253:9: note: in expansion of macro ‘MPL_ERROR_MESSAGE’
               MPL_ERROR_MESSAGE("Invalid Position at (%l, %l, %l)", x, y, z);
  
  </pre>
  
  <p>EDIT 2: as was requested, one of the places that triggers warnings:</p>
  
  <pre><code>inline long arrayIndex(MPL_Position&amp; sMPLP_p)
  {
      long x, y, z;
      x = MPL_ROUND_INT((d_delta*sMPLP_p.getX())/d_sizeX__);
      y = MPL_ROUND_INT((d_delta*sMPLP_p.getY())/d_sizeY__);
      z = MPL_ROUND_INT((d_delta*sMPLP_p.getZ())/d_sizeZ__);
  
      if( (x&gt;=0) &amp;&amp; (x&lt;n_sizeX__) &amp;&amp; (y&gt;=0) &amp;&amp; (y&lt;n_sizeY__) &amp;&amp; (z&gt;=0) &amp;&amp; (z&lt;n_sizeZ__) ){ //isValidPosition(...)
          return( (x*n_sizeY__ + y)*n_sizeZ__ + z );
      }
  
      MPL_ERROR_MESSAGE("Invalid Position at (%l, %l, %l)", x, y, z);
  
      MPL_GE_InvalidPosition(sMPLP_p);
  
      return( -1 );
  }
  </code></pre>
  
  <p>(n_size?__ and d_size?__ are class attributes; dont bother trying to understand that... :P ) </p>