FWIW: The explanation by Dave G in the comments isn't quite right (I couldn't reply there, comments appear closed):
> void something(); // prototype of function that takes undetermined number of arguments
> void something(void); // prototype of function that takes no arguments
> void something() { return; } // function that takes no arguments
isn't quite right as `void something(){ return; }` is still a function that takes an undetermined number of arguments, it just cannot access them; calling `something(1,2,3)` is still valid.
The other resource I use for similar situations is http://c-faq.com/decl/spiral.anderson.html [EDIT]: someone beat me to it
FWIW: The explanation by Dave G in the comments isn't quite right (I couldn't reply there, comments appear closed):
> void something(); // prototype of function that takes undetermined number of arguments
> void something(void); // prototype of function that takes no arguments
> void something() { return; } // function that takes no arguments
isn't quite right as `void something(){ return; }` is still a function that takes an undetermined number of arguments, it just cannot access them; calling `something(1,2,3)` is still valid.
> void unknown(){ return ;}
> int main(void){ something(1,2,3);}
is valid.