> In this proposal, a function declarator without a parameter list declares a prototype for a function that takes no parameters (like it does in C++).
And it seems like gcc implements this under -std=c2x now:
zx2c4@thinkpad /tmp $ cat a.c int blah() { return 7; } int main(int argc, char *argv[]) { return blah(argc); } zx2c4@thinkpad /tmp $ gcc -std=c17 a.c zx2c4@thinkpad /tmp $ gcc -std=c2x a.c a.c: In function ‘main’: a.c:8:16: error: too many arguments to function ‘blah’ 8 | return blah(argc); | ^~~~ a.c:1:5: note: declared here 1 | int blah() | ^~~~
Edit: parent is correct it IS changing
> We could make this change because foo() decls and definitions had been deprecated since C89/99, longer than I've been alive.
> Implementations will likely warn on foo() decls for a while, and error if someone calls it with foo(too, many, args);.
https://mobile.twitter.com/__phantomderp/status/149481259506...
int foo(int, int) is a function taking two arguments. int foo(int) is a function taking one argument. int foo() ought to mean a function taking no arguments, not a function with an unspecified number of arguments!
> In this proposal, a function declarator without a parameter list declares a prototype for a function that takes no parameters (like it does in C++).
And it seems like gcc implements this under -std=c2x now: