parameter name omitted, C++ vs C

c, c++, compilation

Solution

No, in C you cannot omit identifiers for parameters in function definitions.

The C99 standard says:

[6.9.1.5] If the declarator includes a parameter type list, the declaration of each parameter shall include an identifier, except for the special case of a parameter list consisting of a single parameter of type void, in which case there shall not be an identifier. No declaration list shall follow.

The C++14 standard says:

[8.3.5.11] An identifier can optionally be provided as a parameter name; if present in a function definition , it names a parameter (sometimes called “formal argument”). [Note: In particular, parameter names are also optional in function definitions and names used for a parameter in different declarations and the definition of a function need not be the same.]

Problem

In C++, I tend to omit the parameter's name under some circumstances. But in C, I got an error when I omitted the parameter's name. Here is the code: ``` void foo(int); //forward-decl, it's OK to omit the parameter's name, in both C++ and C int main() { foo(0); return 0; } void foo(int) //definition in C, it cannot compile with gcc { printf("in foo\n"); } void foo(int) //definition in C++, it can compile with g++ { cout << "in foo" << endl; } ``` Why is that? Can't I omit the parameter's name in C function definition?

Original source

Related problems