Home > front end >  Calling boolean function without an argument inside of an if-statement in C
Calling boolean function without an argument inside of an if-statement in C

Time:03-25

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.

  • Related