2012-01-10 85 views
5

在.pro文件,我指定的项目:当我尝试使用异常时,为什么我的代码在Qt Creator中使用-fno-exceptions编译?

QMAKE_CXXFLAGS += -fno-exceptions 

但我能在我的应用程序抛出异常。对此有何想法?

示例:这不应该工作,但它的作品

#include <QApplication> 
#include <QtDebug> 

int main(int c, char**v) 
{ 
    QApplication app(c,v); 
    try 
    { 
     throw 1; 
    } 
    catch(int i) 
    { 

    } 
    return app.exec(); 
} 
+1

Qt库不使用异常。 – 2012-01-10 12:08:57

+0

什么问题?问题是:“为什么我的代码会被编译,我预料它会失败,因为我错误地试图在我试图用-fno-exceptions?编译的代码中抛出一个异常?”?或者是这样的问题,“我如何正确地将我的异常使用代码与Qt链接?”? “对此有任何想法”对于SO来说是不恰当的广泛的,它不是在这里调查人们对给定文本的个人反应;-) – 2012-01-10 12:12:47

+0

@volodymyr但我使用。 – smallB 2012-01-10 12:13:31

回答

11

您不会通过设置QMAKE_CXXFLAGS来关闭例外,因为此选项由CONFIG处理。您应该使用

CONFIG-=exceptions 

将其关闭。

见G ++ ARGS时,你有没有QMAKE_CXXFLAGS也不CONFIG设置更改:

g++ -c -O2 -frtti -fexceptions -mthreads -Wall <...> main.cpp 

现在,让我们设置QMAKE_CXXFLAGS:获得

g++ -c -fno-exceptions -O2 -frtti -fexceptions -mthreads -Wall <...> main.cpp 

哎呀,我们得到我们-fno-exceptionsCONFIG覆盖“ s -fexceptions。现在 ,让我们设置CONFIG

g++ -c -O2 -frtti -Wall -fno-exceptions <...> main.cpp 
mingw32-make.exe[1]: Leaving directory `G:/proj/ingeritance' 
main.cpp: In function 'int qMain(int, char**)': 
main.cpp:22:15: error: exception handling disabled, use -fexceptions to enable 
mingw32-make.exe[1]: *** [release/main.o] Error 1 
mingw32-make.exe: *** [release] Error 2 

哦!编译错误!

2

尝试使用以下

QMAKE_CFLAGS_RELEASE -= -fno-exceptions 

QMAKE_CXXFLAGS_RELEASE -= -fno-exceptions 
6

两个我有点被这个问题困惑。

如果您有(或链接到)抛出异常的代码,您不能通过使用-fno-exceptions构建代码来使它们消失。该标志会影响生成支持trycatch所需的代码,而不仅仅是实际抛出异常的代码。

查看GCC documentation了解详情。该文档说:

总而言之,有效的C++代码与异常处理转换成方言没有异常处理。

所以,似乎编译器或多或少地导致异常处理(和抛出)代码“消失”,而不是检测到它的使用并标记错误。后者似乎是你期望的,但那个期望是完全错误的。

+0

+1,或许比链接的库文档更适合,这里是[代码生成器选项页面](http://gcc.gnu.org/onlinedocs/gcc-4.6 0.2/GCC /代码-GEN-Options.html#索引fexceptions-2164)。 – AProgrammer 2012-01-10 12:36:02

相关问题