[Bug c/48091] No warning when given function arguments mismatch earlier function definition which GCC assumes to be K&R
eerott at gmail dot com
gcc-bugzilla@gcc.gnu.org
Wed Mar 30 18:08:00 GMT 2011
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=48091
Eero Tamminen <eerott at gmail dot com> changed:
What |Removed |Added
----------------------------------------------------------------------------
Summary|No warning when given |No warning when given
|function arguments mismatch |function arguments mismatch
|earlier, old style K&R |earlier function definition
|function definition |which GCC assumes to be K&R
--- Comment #3 from Eero Tamminen <eerott at gmail dot com> 2011-03-30 17:59:26 UTC ---
Another example about how dangerous this default GCC behavior is.
Consider code A:
------------------
static int a, b;
void set_a(int i) {
a = i;
}
void set_b(int i) {
b = i;
}
int add() {
return a+b;
}
------------------
And its usage from elsewhere:
------------------
#include <stdio.h>
int main(int argc, const char *argv[] __attribute__((unused)))
{
return add(argc, 50);
}
------------------
GCC doesn't catch this because it assumes the code is obsolete K&R syntax
without even bothering to give user a warning about it. Even when user is
requesting warnings with options like:
gcc -Wall -Wextra --std=c99 -pedantic -O2 test.c
Code A) is *not* K&R. Nowadays it's either C++ code copied to a C program or
code from people who don't know or remember that only in C++ "add()" means void
argument whereas in ANSI-C "add(void)" should be used.
I see this in (non-K&R) C sources all the time, it's very common mistake about
which GCC doesn't bother to give any warning.
Confirmed?
More information about the Gcc-bugs
mailing list