Winapi 如何在特定功能上使用/EHsc获得/EHa的好处? 如果我知道在我的程序中有一个特定的外“C”函数(例如,代码> RAISEExpAs/COD>)是唯一的函数,它会引起SEH异常,并且我希望它们转换成C++异常,有没有办法让我“选择性地启用”代码> /EH

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 { //

如何在特定功能上使用/EHsc获得/EHa的好处?

如果我知道在我的程序中有一个特定的<代码>外“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.