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