C ++ fesetexceptflag () - Perpustakaan Standard C ++

Fungsi fesetexceptflag () dalam C ++ menetapkan bendera pengecualian titik terapung yang ditentukan dari objek penunjuk ke persekitaran titik terapung.

Fungsi fesetexceptflag () ditentukan dalam fail header.

prototaip fesetexceptflag ()

 int fesetexceptflag (const fexcept_t * flagp, int kecuali);

Fungsi fesetexceptflag () cuba menyalin semua kandungan bendera pengecualian titik terapung yang ditentukan oleh kecuali dari bendera ke persekitaran titik terapung.

Fungsi ini hanya mengubah bendera dan tidak menimbulkan pengecualian.

fesetexceptflag () Parameter

  • flagp: Penunjuk ke objek fexcept_t di mana bendera akan dibaca.
  • kecuali: Senarai bitmask tanda pengecualian untuk ditetapkan.
Makro yang diterima Bitmask
Makro Jenis Penerangan
FE_DIVBYZERO Kesalahan tiang Pembahagian dengan sifar
FE_INEXACT Tidak tepat Hasil yang tidak tepat seperti (1.0 / 3.0)
FE_INVALID Kesalahan domain Sekurang-kurangnya satu argumen yang digunakan adalah nilai yang fungsinya tidak ditentukan
FE_OVERFLOW Kesalahan julat limpahan Hasilnya terlalu besar dalam ukuran untuk ditunjukkan oleh jenis pengembalian
FE_UNDERFLOW Kesalahan julat aliran bawah Hasilnya terlalu kecil pada skala besar untuk diwakili oleh jenis pengembalian
FE_ALL_EXCEPT Semua pengecualian Semua pengecualian disokong oleh pelaksanaan

fesetexceptflag () Nilai pulangan

  • Fungsi fesetexceptflag () mengembalikan sifar kejayaan, bukan sebaliknya.

Contoh: Bagaimana fungsi fesetexceptflag () berfungsi?

 #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; )

Semasa anda menjalankan program, outputnya adalah:

 Pengecualian yang dinaikkan: FE_DIVBYZERO Pengecualian yang dinaikkan: FE_DIVBYZERO FE_INVALID FE_OVERFLOW Pengecualian yang meningkat: FE_DIVBYZERO

Artikel menarik...