我刚刚遇到了一些奇怪的行为,来自我使用Strawberry Perl获取的Windows版本g++编译器。它允许我省略返回语句。
我有一个成员函数,返回一个由两个指针组成的结构体,名为boundTag
:
struct boundTag Box::getBound(int side) {
struct boundTag retBoundTag;
retBoundTag.box = this;
switch (side)
{
// set retBoundTag.bound based on value of "side"
}
}
这个函数给我了一些错误的输出,后来我发现它没有返回语句。我本意是要返回retBoundTag
,但是忘记写了返回语句。当我添加了return retBoundTag;
后一切都正常了。
但是在添加返回语句之前,我已经对这个函数进行了测试,并且得到了正确的boundTag
输出。即使现在,当我删除返回语句时,g++也没有警告地编译通过了。WTF?它会猜测返回retBoundTag
吗?
-Werror=return-type
将有关缺少返回值的警告转换为错误。这样做为我节省了很多时间。 - Krzysztof Voss