Search code examples
cvoid

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


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?


Solution

  • 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.