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?