4 ms·
I feel like basically any "explanation" of fails to sufficiently explain `f()`. `void f(){}` is just a special case of the old style of defining functions. Ano
by maxdamantus 7y ago
I feel like basically any "explanation" of fails to sufficiently explain `f()`.
`void f(){}` is just a special case of the old style of defining functions. Another case of this is `void f(a, b) int a, b; {}`.
Using the old style, functions are defined without "prototypes"; that is, the type of the function does not specify its arguments.
Since changing the meaning of `void f(){}` would have broken backwards compatibility, they added `void f(void){}` as the way of specifying "no arguments" in the new style.
Edit: to further demonstrate, this is a perfectly valid C program:
> void f(a, b) int a, b; {}
> int main(void) { if(0) f("oops"); }
As the type of `f` does not specify its arguments, there is no constraint violation (compilation error), and as the call is never actually performed (`if(0) ..`), the program does not invoke the undefined behaviour that would result in performing the invalid call.