I was wondering why there is no error when the block of code below is executed in C . The error should come from the "func1" block, because we are calling "func2" without an argument. What is being passed in the argument to "func2"? I also realized this only happens when func2 is a boolean function and if it is called inside an if statement. I know that "-4" is not passed from the main function because the output is "1" when it should be "0".
Thanks in advance.
#include <iostream>
bool func2(int b) {
return b>0;
}
int func1(int a) {
if (func2) return 1;
else return 0;
}
int main() {
std::cout << func1(-4);
return 0;
}
CodePudding user response:
The reason the code doesn't fail to compile is because of function to function pointer decay. When you use just the name of a function, it will decay into a pointer to that function. The pointer can then be converted to a bool that will be true if the pointer points to something and false if it is a null pointer. Since the pointer is pointing to a function, it will have a non-null value and that means the expression will evaluate to true.