相比C/C++”潜规则“之默认数据类型,这条”潜规则“个人感觉要更为隐晦,也更容易引发错误。
看代码:
int Bar( void )
{
if(FALSE)
{
return 1;
}
}
int iResult = Bar(void);
请问:
1.上述代码能通过编译吗?
2.如果能的话,那么iResult的值是什么呢?
要回答这个问题,就涉及到了C/C++的另一个”潜规则“——默认返回值。
很显然,Bar这个函数不是所有的逻辑路径都给出了返回值,此时,编译器会脑补默认的返回值——0。
当然,成熟的编译器会给出一条警告,但不会认为这是个错误。
我不知道这个规则的意义是什么,当然相信在大多数情况下,我们也不会去用它,但问题是,这条规则在某种程度上是在包庇程序员的粗心大意,因为上面Bar的实现,从逻辑上来说是不完整的,而我们不能寄希望于编译器来替我们完成。