C++ 有选择地禁用c++;

C++ 有选择地禁用c++;,c++,exception,exception-handling,C++,Exception,Exception Handling,我正在将一个子模块sm集成到一个更大的项目p 集成是通过将sm的源代码添加到p中,然后一起编译(这是由一个相当复杂的多平台构建系统执行的) 这两部分来自不同的供应商sm抛出异常(很多),但是p已禁用它们(我无法更改)。正因为如此,我在编译时遇到了很多麻烦,出现了很多错误:异常处理被禁用,使用-feexceptions启用。启用异常不是一个选项,更改源文件会有问题 有没有一种方法可以在不修改p或原始代码的情况下禁用sm上的异常 注意,有一个#pragma可选择性地禁用警告。是否有类似于禁用异常的功

我正在将一个子模块
sm
集成到一个更大的项目
p

集成是通过将
sm
的源代码添加到
p
中,然后一起编译(这是由一个相当复杂的多平台构建系统执行的)

这两部分来自不同的供应商
sm
抛出异常(很多),但是
p
已禁用它们(我无法更改)。正因为如此,我在编译时遇到了很多麻烦,出现了很多
错误:异常处理被禁用,使用-feexceptions启用
。启用异常不是一个选项,更改源文件会有问题

有没有一种方法可以在不修改
p
或原始代码的情况下禁用
sm
上的异常

注意,有一个
#pragma
可选择性地禁用警告。是否有类似于禁用异常的功能? 也许是这样的:

//source file of main project [code.h]

//Something disables exceptions here
//#pragma disable exceptions??
#include <submodule.h>
//Restore
//#pragma enable exceptions??
#include <...>

//code
//主项目源文件[code.h]
//这里有些东西禁用了异常
//#pragma禁用异常??
#包括
//恢复
//#pragma启用异常??
#包括
//代码

如果您希望编译器只在
sm
中禁用异常,那么代码
抛出错误会发生什么情况?我猜你被卡住了。即使您在sm中禁用了异常,如果在运行时sm执行指令抛出异常(或以某种方式忽略了抛出),它也会使执行处于未定义状态。大多数异常都是由于格式错误的数据引发的,我在每次调用子模块函数之前都会检查这些数据,因此,防止它们被扔掉并不太难。如果可以优雅地处理异常,那将是一场胜利,但在我的情况下,停止hole程序仍然是可以接受的。在所有函数调用中使用
try
/
catch(…)
不是一个选项?@ChristianHackl否,当您禁用异常时,您不允许“处理”它们。我得到的大多数编译器错误都来自try/catch块。