注:本课程参考文献《C安全编码标准》
欢迎关注我👆,收藏下次不迷路┗|`O′|┛ 嗷~~
目录
一.引言
在这个代码冲突的例子里,想象一下,函数f()在a.c文件里被提前描绘了一个模样(即声明了一个原型),但在b.c文件里,却又给它画了一幅完全不同的面孔(定义了另一个不兼容的原型)。这种情况下,两个原型相互矛盾,导致程序行为无法预测,这就是所谓的“未定义行为15”。更糟糕的是,如果谁不小心调用了这个函数,那简直就是踏入了一个未知的雷区,“未定义行为41”会接踵而至,很可能会带来一连串严重的、甚至是灾难性的问题。
二.不安全代码
extern int f(int a);
int g(int a){
return f(a);
}
long f(long a){
return a * 2;
}
三.解决方案
这个相容解决方案使用了函数f()的兼容原型。
extern int f(int a);
int g(int a){
return f(a);
}
int f(int a){