C ++ 'daki fegetexceptflag () işlevi, excepts bağımsız değişkeni belirtilen kayan nokta istisna bayraklarını alır ve flagp ile belirtilen noktada saklar.
Fetgetexceptflag () işlevi başlık dosyasında tanımlanmıştır.
fegetexceptflag () prototipi
int fegetexceptflag (fexcept_t * flagp, int istisnaları);
Excepts argümanı, kayan nokta istisna makrolarının bitsel VEYA olabilir.
fegetexceptflag () Parametreler
- flagp: Bayrakların saklanacağı fexcept_t nesnesine işaretçi.
- excepts: Alınacak istisna bayraklarının bit maskesi listesi.
Makro | Tür | Açıklama |
---|---|---|
FE_DIVBYZERO | Kutup hatası | Sıfıra bölüm |
FE_INEXACT | Hatasız | (1.0 / 3.0) gibi kesin sonuçlar değil |
FE_INVALID | Alan hatası | Kullanılan en az bir argüman, işlevin tanımlanmadığı bir değerdir |
FE_OVERFLOW | Taşma aralığı hatası | Sonuç, dönüş türüyle temsil edilemeyecek kadar büyüklükte |
FE_UNDERFLOW | Alt akış aralığı hatası | Sonuç, dönüş türüyle temsil edilemeyecek kadar küçüktür |
FE_ALL_EXCEPT | Tüm istisnalar | Uygulama tarafından desteklenen tüm istisnalar |
fegetexceptflag () Dönüş değeri
- Fegetexceptflag () işlevi başarı durumunda sıfır, aksi takdirde sıfır olmayan bir değer döndürür.
Örnek: fegetexceptflag () işlevi nasıl çalışır?
#include #include #pragma STDC FENV_ACCESS ON using namespace std; void print_exceptions() ( cout << "Raised exceptions: "; if(fetestexcept(FE_ALL_EXCEPT)) ( if(fetestexcept(FE_DIVBYZERO)) cout << "FE_DIVBYZERO "; if(fetestexcept(FE_INEXACT)) cout << "FE_INEXACT "; if(fetestexcept(FE_INVALID)) cout << "FE_INVALID "; if(fetestexcept(FE_OVERFLOW)) cout << "FE_OVERFLOW "; if(fetestexcept(FE_UNDERFLOW)) cout << "FE_UNDERFLOW "; ) else cout << "None"; cout << endl; ) int main() ( fexcept_t excepts; feraiseexcept(FE_DIVBYZERO); /* save current state*/ fegetexceptflag(&excepts,FE_ALL_EXCEPT); print_exceptions(); feraiseexcept(FE_INVALID|FE_OVERFLOW); print_exceptions(); /* restoring previous exceptions */ fesetexceptflag(&excepts,FE_ALL_EXCEPT); print_exceptions(); return 0; )
Programı çalıştırdığınızda, çıktı:
Yükseltilmiş istisnalar: FE_DIVBYZERO Yükseltilmiş istisnalar: FE_DIVBYZERO FE_INVALID FE_OVERFLOW Yükseltilmiş istisnalar: FE_DIVBYZERO