未定义行为及预防
Undefined behaviour:UB——系统级编程语言的达摩克里斯之剑
现代编程语言如java,go,python都是内存安全的
未定义行为在C,C++,rust等系统级编程语言中属于危险情况使用了”不可用”或”错误”的程序结构时的行为,行为会产生不可预测的结果
title:如下代码,i的值不符合常理
collapse:open
```c
#include<stdio.h>
int main()
{
int i;
printf("%d", i);
for(int j = i; i <= 0; j++)
printf("循环一");
printf("%d", i);
for(int j = i; i > 0; j++)
printf("循环二");
printf("%d", i);
return 0;
/*output:
0
循环一
1
循环二
0
*/
}title:Question
collapse:open
为什么允许未定义行为?
- 标准制定:与其定义全部行为,不如只定义”标准行为“
- 编译器:C语言环境复杂,需要编译器留"自主权"
- 性能:检测必然带来损耗title:Summary
collapse:open
- 理论:未定义行为不可预测
- 实际:具体情况具体分析,还是有可能找出原因的玄学 = 未定义行为 + 编译器优化