> I give prototypes of foo and foo1 before use and define them, maybe 8c
> just ignore these prototypes when it see the definitions.
the prototypes are fine, but that one doesn't agree with the actual definition
because the rules require the old style declaration
void f(b)
char b;
{}
to be treated as if it were
void f(b)
int b;
{}
whereas
void f(char b)
{}
would be compatible with a prototype
void f(char);
the diagnostic appears because it doesn't ignore the prototype
(if it ignored it, all would be fine) but is obliged to check it against the
actual definition which, according to the historical rules for that style of
declaration,
does not match.
if you find that all a little confusing, that's all the more reason to avoid
the old style completely!
for old code that i control, i invariably take the opportunity to update it.
8c -w ... sometimes finds other problems in old code.