I don't understand why following simple code is compiled (using -Wall) without even warnings by gcc and clang:
#include <stdio.h>
void foo();
int main()
{
foo();
}
void foo(char *p)
{
puts(p);
}
IMO this code is obviously wrong and the compiler should detect this.