When I do as below the code works fine :
#include
void test( int a)
{
printf(\"a=%d\\n\",a);
}
int main()
{
test(10);
return 1;
}
First,quoting C11
, chapter 6.7.6.3
The only storage-class specifier that shall occur in a parameter declaration is
register
.
So, this is explicitly specified in the standard.
That said, this restriction exists because with an explicit storage class like static
/ extern
, there will be problems in memory management, as function parameters are in the block scope for the function and their lifetimes are limited to the execution of the function body.
A parameter variable cannot outlive the call to the function; otherwise, what would be the effect of the argument in the next call to the same function? So static
storage is not meaningful, and auto
is redundant.
Since the function parameters has no linkage, extern
also makes no sense.
Additionally, as mentioned in C11
, for a hosted environment, the conforming signature for main()
is int main(void)
, at least.