void foo(int* a){
// check if a is null ?
}
int* get_a(void){
return NULL;
}
int main(){
int* a= get_a();
// check if a is null ?
foo(a);
return 0;
}
void foo(const int& a){
// check if a >0 ?
}
int get_a(void){
return -1;
}
int main(){
int a = get_a();
// check if a >0 ?
foo(a);
return 0;
}
1
lihongjie0209 2019-03-29 10:41:09 +08:00
看你怎么定义这个函数了 前置条件和后置条件了解一下
|
2
mooncakejs 2019-03-29 10:42:25 +08:00 via iPhone
被调函数做。 高频或者 内部函数不用做。
|
3
jmc891205 2019-03-29 10:51:10 +08:00
如果现在以及将来都是只有同一个人调用 那谁做都可以
如果会有其他人来调用 那被调的要做 |
4
wutiantong 2019-03-29 10:59:16 +08:00
为了解决这个问题现代语言引入了 optional 类型,
即使 C 语言里没有 optional 类型,你也应该效仿其思想, 关键点是要事先约定好参数是否允许为 null。 |
5
wutiantong 2019-03-29 11:03:57 +08:00
应该尽可能的把 约束条件封装成类型,而不是使用裸的基本类型(指针,int, double )然后再写 check code
|
6
wutiantong 2019-03-29 11:06:13 +08:00
甚至通过最简单的 typedef 也能取得有意义的改进(通过类型名产生一种文档约定的效果)
|
7
darknoll 2019-03-29 11:11:40 +08:00
是个好问题
|
8
Yourshell 2019-03-29 11:25:53 +08:00
如何使用这个函数不应该由这个函数定义吗?
|
9
Ahaochan 2019-03-29 11:32:03 +08:00
被调函数做,你不能保证调用你代码的人是怎样的一个人(
|
10
hx1997 2019-03-29 11:33:01 +08:00 via Android
统一约定好就行了吧,如果内部不检查,就要在文档或注释写清楚。
|
11
geelaw 2019-03-29 11:39:33 +08:00 via iPhone
需要考虑的问题是:
- 谁应该消费这个函数? - 潜在消费者和提供者之间有边界吗? - 怎样效率高? |
12
miaoxia 2019-03-29 12:00:21 +08:00 via iPhone
函数内部已代码的方式做判断,外部已文档的方式通知。调用方基于文档安规则传值,如果没按规则,就会得到文档中提到的异常情况。
|
13
TreStone 2019-03-29 12:56:27 +08:00 via Android
模块内部接口调用调用者保证,对外接口被调者保证
|
14
MeteorCat 2019-03-29 13:13:00 +08:00 via Android
被调用参数做
|
15
owenliang 2019-03-29 13:14:59 +08:00 via Android
对外提供一定要检查。
|
16
Joyboo 2019-03-29 15:44:58 +08:00
如果一万个地方调用呢?难道做一万次检查
|
17
bp0 2019-03-29 17:02:03 +08:00
|
18
ian511 2019-03-29 17:08:48 +08:00
脱离不了从上下游实际 use case 考虑
|