http://gcc.gnu.org/bugzilla/show_bug.cgi?id=44513

Nicola Pero <nicola at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |nicola at gcc dot gnu.org

--- Comment #1 from Nicola Pero <nicola at gcc dot gnu.org> 2011-01-17 23:48:16 
UTC ---
I tested GCC 4.6.0, and it seems to have been modified to match what you
want:

cat -n test.c
    1  #include "stdio.h"
    2
    3  void
    4  foo (int i)
    5  {
    6    printf ("%d%d", i); 
    7  }

gcc test.c -c -Wall
test.c: In function ‘foo’:
test.c:6:3: warning: format ‘%d’ expects a matching ‘int’ argument [-Wformat]

I personally preferred GCC's original error message; when you have lots of 
arguments, the new system will generate lots of error messages, all of them
technically correct, but providing a confusing picture.  Eg,

void foo (int i, float f, int j, float c)
{
  printf ("%d%f%d%f", f, j, c);
}

(where the missing argument is the first one) will generate 4 error messages
now:

test.c: In function ‘foo’:
test.c:5:3: warning: format ‘%d’ expects argument of type ‘int’, but argument 2
has type ‘double’ [-Wformat]
test.c:5:3: warning: format ‘%f’ expects argument of type ‘double’, but
argument 3 has type ‘int’ [-Wformat]
test.c:5:3: warning: format ‘%d’ expects argument of type ‘int’, but argument 4
has type ‘double’ [-Wformat]
test.c:5:3: warning: format ‘%f’ expects a matching ‘double’ argument
[-Wformat]

In this context, I would prefer the traditional GCC error message ("too few
arguments"), which is a simple, clear summary of the problem.

Thanks

Reply via email to