Using void in functions without parameter?

ApprenticeHacker picture ApprenticeHacker · Mar 3, 2012 · Viewed 15.9k times · Source

In C++ using void in a function with no parameter, for example:

class WinMessage
{
public:
    BOOL Translate(void);
};

is redundant, you might as well just write Translate();.

I, myself generally include it since it's a bit helpful when code-completion supporting IDEs display a void, since it ensures me that the function takes definitely no parameter.

My question is, Is adding void to parameter-less functions a good practice? Should it be encouraged in modern code?

Answer

Flexo picture Flexo · Mar 3, 2012

In C++

void f(void);

is identical to:

void f();

The fact that the first style can still be legally written can be attributed to C.
n3290 § C.1.7 (C++ and ISO C compatibility) states:

Change: In C++, a function declared with an empty parameter list takes no arguments.

In C, an empty parameter list means that the number and type of the function arguments are unknown.

Example:

int f(); // means int f(void) in C++
         // int f( unknown ) in C

In C, it makes sense to avoid that undesirable "unknown" meaning. In C++, it's superfluous.

Short answer: in C++ it's a hangover from too much C programming. That puts it in the "don't do it unless you really have to" bracket for C++ in my view.