- 主题:“一个函数只有一个出口”,这军规是不是早过时了?
现在都用RAII,实际上可以从一个函数体的任何位置提前return掉,也不会导致leak。
现在习惯这种写法了(VC++要打开4165编译警告,防止在返回类型不是bool的函数中误用这个宏):
#pragma warning(1 : 4165)
#define CHECK(x) \
{ \
static_assert(std::is_same<decltype(x), bool>::value); \
\
if (!(x)) \
return false; \
}
bool SomeFunc() {
...
CHECK(SomeAction1());
...
CHECK(SomeAction2());
...
CHECK(SomeAction3());
return true;
}
--
修改:z16166 FROM 111.199.145.*
FROM 111.199.145.*
记得网上看的Google style好像是提倡提前返回吧
【 在 z16166 的大作中提到: 】
: 现在都用RAII,实际上可以从一个函数体的任何位置提前return掉,也不会导致leak。
: 现在习惯这种写法了(VC++要打开4165编译警告,防止在返回类型不是bool的函数中误用这个宏):
: #pragma warning(1 : 4165)
: ...................
--
FROM 45.77.25.*
我敲还有过这种奇怪的要求,果然我还年轻还能再996几年。
个人写代码时候倾向于减少缩进的次数。
统计显示分支代码比顺序代码的bug率高得多,能提前返回的都提前返回了。
【 在 z16166 的大作中提到: 】
: 现在都用RAII,实际上可以从一个函数体的任何位置提前return掉,也不会导致leak。
: 现在习惯这种写法了(VC++要打开4165编译警告,防止在返回类型不是bool的函数中误用这个宏):
: #pragma warning(1 : 4165)
: ...................
--
FROM 73.162.73.*
这个军规是给C的吧
--
FROM 111.198.57.*
查了一下,好像是的
【 在 eggcar 的大作中提到: 】
: 这个军规是给C的吧
--
FROM 111.199.145.*
这种rule很过时了吧
--
FROM 59.109.157.*
感觉是早期的代码检查工具实在是扫不出什么干货问题了报一报这种的。
--
FROM 59.109.157.*
c木有raii,所以最佳实践是用goto统一释放资源再退出
raii应该就是为了解决这个问题引入的吧
【 在 z16166 的大作中提到: 】
: 查了一下,好像是的
:
--
FROM 61.149.18.*
宁可用这个,也不用这个宏
https://www.fluentcpp.com/2020/04/24/else-before-if/
当然哪个我也不会用。
【 在 z16166 的大作中提到: 】
: 现在都用RAII,实际上可以从一个函数体的任何位置提前return掉,也不会导致leak。
: 现在习惯这种写法了(VC++要打开4165编译警告,防止在返回类型不是bool的函数中误用这个宏):
: #pragma warning(1 : 4165)
: ...................
--
修改:DoorWay FROM 61.185.161.*
FROM 61.185.161.*