
上QQ阅读APP看书,第一时间看更新
Remember the parentheses!
First, a simple example of how function pointers can cause difficult to notice bugs in your code. A global function called get_status performs various validation actions to determine if the state of the system is valid. The function returns a value of zero to mean that the system state is valid and values over zero are error codes:
// values over zero are error codes
int get_status()
{
int status = 0;
// code that checks the state of data is valid
return status;
}
The code could be called like this:
if (get_status > 0)
{
cout << "system state is invalid" << endl;
}
This is an error because the developer has missed off the (), so the compiler does not treat this as a function call. Instead, it treats this as a test of the memory address of the function, and since the function will never be located at a memory address of zero, the comparison will always be true and the message will be printed even if the system state is valid.