C ++ fesetexceptflag () - C ++ Τυπική βιβλιοθήκη

Η συνάρτηση fesetexceptflag () σε C ++ ορίζει καθορισμένες σημαίες εξαίρεσης κινούμενου σημείου από ένα αντικείμενο δείκτη στο περιβάλλον κινητού σημείου.

Η συνάρτηση fesetexceptflag () ορίζεται στο αρχείο κεφαλίδας.

πρωτότυπο fesetexceptflag ()

 int fesetexceptflag (const fexcept_t * flagp, int kecuali)

Η συνάρτηση fesetexceptflag () επιχειρεί να αντιγράψει όλα τα περιεχόμενα των σημαιών εξαίρεσης κινητού σημείου που καθορίζονται από εξαιρέσεις από το flagp στο περιβάλλον κυμαινόμενου σημείου.

Αυτή η λειτουργία τροποποιεί μόνο τις σημαίες και δεν δημιουργεί εξαιρέσεις.

fesetexceptflag () Παράμετροι

  • flagp: Ένας δείκτης σε ένα αντικείμενο fexcept_t από το οποίο θα διαβαστούν οι σημαίες.
  • kecuali: Bitmask λίστα των σημαιών εξαίρεσης που θα οριστούν.
Το Bitmask δέχτηκε μακροεντολές
Μακροεντολή Τύπος Περιγραφή
FE_DIVBYZERO Σφάλμα πόλου Διαίρεση με το μηδέν
FE_INEXACT Ανακριβής Δεν υπάρχουν ακριβή αποτελέσματα όπως (1.0 / 3.0)
FE_INVALID Σφάλμα τομέα Τουλάχιστον ένα όρισμα που χρησιμοποιείται είναι μια τιμή για την οποία δεν έχει οριστεί η συνάρτηση
FE_OVERFLOW Σφάλμα υπερχείλισης Το αποτέλεσμα είναι πολύ μεγάλο σε μέγεθος για να αναπαρασταθεί από τον τύπο επιστροφής
FE_UNDERFLOW Σφάλμα εύρους ροής Το αποτέλεσμα είναι πολύ μικρό σε μέγεθος για να αναπαρασταθεί από τον τύπο επιστροφής
FE_ALL_EXCEPT Όλες οι εξαιρέσεις Όλες οι εξαιρέσεις υποστηρίζονται από την εφαρμογή

fesetexceptflag () Επιστροφή τιμή

  • Η συνάρτηση fesetexceptflag () επιστρέφει μηδέν στην επιτυχία, μη μηδενικά.

Παράδειγμα: Πώς λειτουργεί η λειτουργία fesetexceptflag ();

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

Όταν εκτελείτε το πρόγραμμα, η έξοδος θα είναι:

 Αυξημένες εξαιρέσεις: FE_DIVBYZERO Αυξημένες εξαιρέσεις: FE_DIVBYZERO FE_INVALID FE_OVERFLOW Αυξημένες εξαιρέσεις: FE_DIVBYZERO

ενδιαφέροντα άρθρα...