holy shit under GCC 14, a pre-ANSI function definition like
static void gaming(a, b, c)
int a, b, c;
{
//whatever
DOES NOT EVEN WARN if you give it the wrong amount of arguments
found as part of very important work (testing tgif bugs https://bugs.debian.org/71783)
omg omg omg, literal bucket list item, just closed https://bugs.debian.org/65117, submitted 2000-06 (this is before /I/ was submitted)
@nabijaczleweli hi is hold+installed, not half-installed
(you are that young? colour me impressed)
@mirabilos blegh, hi/ih. whatever
@nabijaczleweli the first is the “want”, the second the “got”. The states directly map to what dselect
does, so those of us who learnt Debian before apt
left the “beta, highly experimental, don’t use yet” state have a slight headstart with this. (Though dselect
uses =
for hold and adds a third, the action to take.)
@nabijaczleweli that’s correct, cf. open(2)
(it’s not variadic), and used a lot in old code
@mirabilos on one hand: yes. on the other: bad, should be in -Wall -Wextra
(also, open is variadic, but sure, I can see why in pre-modern C a quiet third argument would be desirable)
@nabijaczleweli yes, should definitely be in at least -Wextra
.
Good news though is that C23 just dropped K&R-style functions.
At least Debian now adds it (-Werror=implicit-function-declaration
) by default since it’s needed for the way glibc implements the transition towards 64-bit time_t
.
@nabijaczleweli (open didn’t use to be variadic, I certainly learnt it not that way)
@mirabilos yeah, for open and open alone you could say that it /is/ (through a lot of compiler and libc magick) actually the two overloaded prototypes the manual lists, with the variadic spec being an implementation detail, so it's unsurprising old unix just had a literally optional argument