【发布时间】:2014-11-14 17:42:03
【问题描述】:
我写了代码
void SEHtest(int i) {
int s = 0;
__try {
cout << "code1" << endl;
int j = 1 / s;
cout << "code2" << endl;
} __except((s = 1, i)) {
cout << "code3" << endl;
}
cout << "code4" << endl;
return;
}
int main() {
SEHtest(-1);
return 0;
}
我正在等待输出
code1
code2
code4
但我只有
code1
和无限循环。
为什么会这样?
将 volatile 键名添加到 s 和 j 并没有修复它。
【问题讨论】:
-
看看编译器生成的汇编代码。 (1/s) 中的 s 很可能被视为常数零,因为在正常的 C/C++ 控制流中它不可能有任何其他值。
-
你用的是什么编译器?我使用 C++Builder,你所展示的内容对我来说很好,我看到
code1、code2和code4符合预期。 -
@RemyLebeau VC 编译器来自 Visual Studio 2008