Kos*_*Kos 8 javascript c c++ programming-languages undefined-behavior
假设这样的情况:
int a = (--t)*(t-2);
int b = (t/=a)+t;
Run Code Online (Sandbox Code Playgroud)
在C和C++中,这是未定义的行为,如下所述:未定义的行为和序列点
但是,这种情况如何:
我正在修复一个Javascript - > C++端口,现在很多地方都没有注意到它.我想知道其他语言通常如何处理这个问题...保留命令undefined以某种方式特定于C和C++,不是吗?
根据ECMA脚本规范,我认为javascript应该符合,在乘法和加法语句中,它在评估右侧之前评估左侧.(见11.5和11.6).我认为这意味着代码应该相当于
t = t - 1;
int a = t * (t - 2);
t = t / a;
int b = t + t;
Run Code Online (Sandbox Code Playgroud)
但是,您不应始终相信规范与实现相同!
在这种令人困惑的情况下,最好的办法是尝试对原始操作环境中模糊的代码行进行各种输入,并尝试确定它在做什么.确保测试可以确认假设的案例,并测试可以伪造它的案例.
编辑:显然大多数JavaScript实现了ECMAScript的第3版,所以我改变了链接到该规范.
| 归档时间: |
|
| 查看次数: |
483 次 |
| 最近记录: |