Is there a difference between foo(void) and foo() in C++ or C?

arguments, c, c++, function-declaration

Solution

Historical note: this answer applies to C17 and older editions. C23 and later editions treat `void foo()` differently.

In C:

- `void foo()` means "a function `foo` taking an unspecified number of arguments of unspecified type"

- `void foo(void)` means "a function `foo` taking no arguments"

In C++:

- `void foo()` means "a function `foo` taking no arguments"

- `void foo(void)` means "a function `foo` taking no arguments"

By writing `foo(void)`, therefore, we achieve the same interpretation across both languages and make our headers multilingual (though we usually need to do some more things to the headers to make them truly cross-language; namely, wrap them in an `extern "C"` if we're compiling C++).

Problem

Consider these two function definitions: ``` void foo() { } void foo(void) { } ``` Is there any difference between these two? If not, why is the `void` argument there? Aesthetic reasons?

Original source

Related problems