未定义行为及预防

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
- 理论:未定义行为不可预测
- 实际:具体情况具体分析,还是有可能找出原因的

玄学 = 未定义行为 + 编译器优化