Winapi 如何在特定功能上使用/EHsc获得/EHa的好处? 如果我知道在我的程序中有一个特定的外“C”函数(例如,代码> RAISEExpAs/COD>)是唯一的函数,它会引起SEH异常,并且我希望它们转换成C++异常,有没有办法让我“选择性地启用”代码> /EH
如何在特定功能上使用/EHsc获得/EHa的好处?Winapi 如何在特定功能上使用/EHsc获得/EHa的好处? 如果我知道在我的程序中有一个特定的外“C”函数(例如,代码> RAISEExpAs/COD>)是唯一的函数,它会引起SEH异常,并且我希望它们转换成C++异常,有没有办法让我“选择性地启用”代码> /EH,winapi,visual-c++,seh,structured-exception,Winapi,Visual C++,Seh,Structured Exception,如何在特定功能上使用/EHsc获得/EHa的好处? 如果我知道在我的程序中有一个特定的外“C”函数(例如,代码> RAISEExpAs/COD>)是唯一的函数,它会引起SEH异常,并且我希望它们转换成C++异常,有没有办法让我“选择性地启用”代码> /EHA < /代码>,以实现该功能,因此,异常被转换为csstructured\u异常,而不会膨胀或减慢程序的其余部分,因为显然没有编译器选项可以这样做。也许: void RaiseException() { __try { //
如果我知道在我的程序中有一个特定的<代码>外“C”<代码>函数(例如,代码> RAISEExpAs/COD>)是唯一的函数,它会引起SEH异常,并且我希望它们转换成C++异常,有没有办法让我“选择性地启用”代码> /EHA < /代码>,以实现该功能,因此,异常被转换为
csstructured\u异常
,而不会膨胀或减慢程序的其余部分,因为显然没有编译器选项可以这样做。也许:
void RaiseException() {
__try {
// do something that might throw here...
}
__except(EXCEPTION_EXECUTE_HANDLER) {
throw std::exception("structured exception");
}
}
不,它需要在呼叫站点处于活动状态。提供证据证明这两条cpu指令确实会降低代码的速度。很久以前就被淘汰了。现在,“omigod,它是吸泥”是一个没有价值的钓鱼探险。@HansPassant:Microsoft自己说(甚至在VS 2012文档中)可能会导致性能较差的映像,因为编译器不会像优化
try
块那样激进,即使编译器没有看到抛出”,我认为他们这样说并不是在犯错误(请随意纠正我)。至于代码膨胀(未提及),这是真实的:使用/EHa
,我的可执行文件会增加约10-20%。我从来没有说过它“糟透了”(见鬼,至少有/EHa
可用),我只是觉得没有必要为我不使用的东西膨胀我的可执行文件。我可以做一个包装函数,但抛出、捕获,然后再抛出,感觉有点奇怪,这样我就可以得到一个EXCEPTION\u指针
结构,将其输入csstructured\u EXCEPTION
。不过,我想这是一个有效的选择+1.