C ++ fesetexceptflag () - C ++ Standart Kitaplığı

C ++ 'daki fesetexceptflag () işlevi, bir işaretçi nesnesinden kayan nokta ortamına belirtilen kayan nokta istisna bayraklarını ayarlar.

Fesetexceptflag () işlevi başlık dosyasında tanımlanmıştır.

fesetexceptflag () prototipi

 int fesetexceptflag (const fexcept_t * flagp, int istisnaları);

Fesetexceptflag () işlevi, istisnalar tarafından belirtilen kayan nokta istisna bayraklarının tüm içeriğini flagp'den kayan noktalı ortama kopyalamaya çalışır.

Bu işlev yalnızca bayrakları değiştirir ve herhangi bir istisna oluşturmaz.

fesetexceptflag () Parametreler

  • flagp: Bayrakların okunacağı fexcept_t nesnesine işaretçi.
  • excepts: Ayarlanacak istisna bayraklarının bit maskesi listesi.
Bit maskesi makroları kabul etti
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

fesetexceptflag () Dönüş değeri

  • Fesetexceptflag () işlevi başarı durumunda sıfır, aksi takdirde sıfır olmayan bir değer döndürür.

Örnek: fesetexceptflag () 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

Ilginç makaleler...