_fpieee_flt
Vyvolá obsluhu uživatelem definované přesahů IEEE 8bajtové výjimky.
int _fpieee_flt(
unsigned long excCode,
struct _EXCEPTION_POINTERS *excInfo,
int handler(_FPIEEE_RECORD *)
);
Parametry
excCode
Kód výjimky.excInfo
Ukazatel na strukturu informací výjimka systému Windows NT.handler
Ukazatel na uživatele IEEE na depeše rutiny.
Vrácená hodnota
Vrácená hodnota _fpieee_flt je hodnota vrácená handler.Jako takové rutinní IEEE filtr může být použito v kromě klauzule strukturovaný mechanismus zpracování výjimek (SEH).
Poznámky
_fpieee_flt Funkce vyvolá obsluhu uživatelem definované přesahů IEEE 8bajtové výjimky a obsahuje všechny příslušné informace.Tato rutina slouží jako filtr výjimka SEH mechanismus, který vyvolá vlastní potřeby zpracování výjimek IEEE.
_FPIEEE_RECORD Struktury, které jsou definovány v Fpieee.h, obsahuje informace týkající se IEEE 8bajtové výjimce.Tato struktura je předána přesahů uživatelem definovaný popisovač podle _fpieee_flt.
Pole _FPIEEE_RECORD |
Description |
---|---|
unsigned int RoundingMode, unsigned int Precision |
Tato pole obsahují informace o prostředí s plovoucí desetinnou čárkou v době došlo k výjimce. |
unsigned int Operation |
Označuje typ operace, která způsobila depeše.Pokud je typ porovnání (_FpCodeCompare), můžete zadat jednu zvláštní _FPIEEE_COMPARE_RESULT hodnoty (podle Fpieee.h) v Result.Value pole.Typ převodu (_FpCodeConvert) označuje, že během operace s plovoucí desetinnou čárkou převodu došlo k pasti.Můžete si prohlédnout Operand1 a Result typy určit typ převodu pokusům. |
_FPIEEE_VALUE Operand1, _FPIEEE_VALUE Operand2, _FPIEEE_VALUE Operand3, _FPIEEE_VALUE Result |
Tyto struktury označují typy a hodnoty operandy a navrhované výsledek: OperandValidPříznak označující, zda je platná hodnota reagovat. FormatTyp dat odpovídající hodnotu.Typ formátu může být vrácena i v případě, že odpovídající hodnota není platná. ValueHodnota dat výsledek nebo operand. Poznámka: Operand3 se používá pouze s funkcí řady procesoru Itanium (IPF). |
_FPIEEE_EXCEPTION_FLAGS Cause, _FPIEEE_EXCEPTION_FLAGS Enable, _FPIEEE_EXCEPTION_FLAGS Status |
_FPIEEE_EXCEPTION_FLAGS obsahuje jeden bit pole na typ výjimky plovoucí bod. Je korespondence mezi tato pole a argumenty použité pro maskování výjimky k _controlfp. Přesný význam každý bit závisí na kontextu: CauseKaždý nastaven bit označuje zejména výjimku, která byla aktivována. EnableKaždý nastaven bit označuje, že je aktuálně nemaskované určité výjimky. StatusKaždý nastaven bit označuje, že je nyní čeká na určité výjimky.Patří sem výjimky, které nebyla odchována protože byly maskovány _controlfp. |
Čekající výjimky, které jsou zakázány jsou aktivována při jejich povolení.Může být výsledkem nedefinované chování při použití _fpieee_flt jako filtr výjimce.Volání _clearfp před povolením výjimky plovoucí bod.
Požadavky
Function |
Požadované záhlaví |
---|---|
_fpieee_flt |
<fpieee.h> |
Další informace o kompatibilitě v tématu Compatibility v úvodu.
Příklad
// crt_fpieee.c
// This program demonstrates the implementation of
// a user-defined floating-point exception handler using the
// _fpieee_flt function.
#include <fpieee.h>
#include <excpt.h>
#include <float.h>
#include <stddef.h>
int fpieee_handler( _FPIEEE_RECORD * );
int fpieee_handler( _FPIEEE_RECORD *pieee )
{
// user-defined ieee trap handler routine:
// there is one handler for all
// IEEE exceptions
// Assume the user wants all invalid
// operations to return 0.
if ((pieee->Cause.InvalidOperation) &&
(pieee->Result.Format == _FpFormatFp32))
{
pieee->Result.Value.Fp32Value = 0.0F;
return EXCEPTION_CONTINUE_EXECUTION;
}
else
return EXCEPTION_EXECUTE_HANDLER;
}
#define _EXC_MASK \
_EM_UNDERFLOW + \
_EM_OVERFLOW + \
_EM_ZERODIVIDE + \
_EM_INEXACT
int main( void )
{
// ...
__try {
// unmask invalid operation exception
_controlfp_s(NULL, _EXC_MASK, _MCW_EM);
// code that may generate
// fp exceptions goes here
}
__except ( _fpieee_flt( GetExceptionCode(),
GetExceptionInformation(),
fpieee_handler ) ){
// code that gets control
// if fpieee_handler returns
// EXCEPTION_EXECUTE_HANDLER goes here
}
// ...
}
Ekvivalent v rozhraní .NET Framework
Nelze použít Použijte volání funkce standardní C, PInvoke. Další informace naleznete v tématu Příklady vyvolat platformu.
Viz také
Referenční dokumentace
Podpora s plovoucí desetinnou čárkou