Is it better to use C void arguments "void foo(void)" or not "void foo()"?

Zifre picture Zifre · Mar 29, 2009 · Viewed 114.1k times · Source

What is better: void foo() or void foo(void)? With void it looks ugly and inconsistent, but I've been told that it is good. Is this true?

Edit: I know some old compilers do weird things, but if I'm using just GCC, is void foo() Ok? Will foo(bar); then be accepted?

Answer

Daniel Earwicker picture Daniel Earwicker · Mar 29, 2009
void foo(void);

That is the correct way to say "no parameters" in C, and it also works in C++.

But:

void foo();

Means different things in C and C++! In C it means "could take any number of parameters of unknown types", and in C++ it means the same as foo(void).

Variable argument list functions are inherently un-typesafe and should be avoided where possible.