对于提出以前多次提出的问题,我表示抱歉。但是经过多次搜索之后,我意识到我可能会在C/C++中处理FPE与在Fortran中处理它们的方式之间产生根本的误解。在混合C/Fortran代码中捕获浮点异常
在Fortran(确切地说是GNU fortran)中,如果想捕获一个浮点异常(例如使用NAN),编译器标志-ffpe-trap = invalid会执行这个技巧。一旦违规语句被执行,就会引发浮点异常。但是,在C(GNU gcc)中,似乎并不是这种情况。更令人讨厌的是(但也许并不奇怪),相同的fortran代码在从C main调用时不会引发异常(并暂停执行),而在Fortran主程序中调用时则会执行该代码。这似乎与使用C或gfortran连接子无关。
经过大量的搜索和阅读,我发现fenv.h中提供了C/C++功能,它提供了处理异常的“C方式”。我看到我可以设置异常标志,然后检查是否有异常。我可以看到这种方法如何在异常处理的方式上提供更多的灵活性。这是在C中处理异常的“最佳实践”方式吗?对于科学编程(其中C通常用于调用fortran代码)似乎很不方便,必须先了解可能发生异常的位置。
C中有没有(简单的)方法让代码在第一次出现异常时暂停?或者在C语言中的异常处理方面还有另外一个范例,那就是我没有完全掌握?
我运行OS X. – Donna
原来'feenableexcept()'是非标准。 [这个问题的答案](http://stackoverflow.com/questions/247053/enabling-floating-point-interrupts-on-mac-os-x-intel)有一些建议和[本博客文章](http: //philbull.wordpress.com/2012/12/09/update-floating-point-exception-handling-on-mac-os-x/)指向一些适用于Linux和Mac OS X的代码。 –
是的,我发现这篇文章和被引用的代码似乎正是我所希望的。您是否对所描述的扩展是否合理? – Donna