Can somebody explain to me why the following code does compile without a warning or error?
I would expect the compiler to warn me that the function no_args
doesn't expect any arguments.
But the code compiles and runs function no_args
recursively.
static void has_args(int a, int b, int c) { printf("has_args\n"); } static void no_args() { printf("no_args\n"); no_args(1, 2, 3); } void main() { no_args(); }
If a function takes no parameters, the parameters may be left empty. The compiler will not perform any type checking on function calls in this case. A better approach is to include the keyword "void" within the parentheses, to explicitly state that the function takes no parameters.
The lesson brief states that “Functions can have zero, one or more parameters”.
(1) The variable side is not given to the parameter, but directly accessed by the function which is possible in JavaScript. (2) The function does not return any value but prints the output to the browser console.
Parameters are essential to functions, because otherwise you can't give the function-machine an input.
In C++, void no_args()
declares a function that takes no parameters (and returns nothing).
In C, void no_args()
declares a function that takes an unspecified (but not variable) number of parameters (and returns nothing). So all your calls are valid (according to the prototype) in C.
In C, use void no_args(void)
to declare a function that truly takes no parameters (and returns nothing).
When you declare a function with an empty argument list, you invoke K&R (pre-prototype) semantics and nothing is assumed about the parameter list; this is so that pre-ANSI C code will still compile. If you want a prototyped function with an empty parameter list, use (void)
instead of ()
.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With