Hàm fegetexceptflag () trong C ++ nhận các cờ ngoại lệ dấu chấm động được chỉ định đối số ngoại lệ và lưu trữ nó tại điểm được chỉ định bởi flagp.
Hàm fetgetexceptflag () được định nghĩa trong tệp tiêu đề.
nguyên mẫu fegetexceptflag ()
int fegetexceptflag (fexcept_t * flagp, int exceptions);
Đối số ngoại lệ có thể là một bitwise HOẶC của macro ngoại lệ dấu chấm động.
Tham số fegetexceptflag ()
- flagp: Một con trỏ đến đối tượng fexcept_t nơi các cờ sẽ được lưu trữ.
- ngoại lệ: Bitmask liệt kê các cờ ngoại lệ cần lấy.
Macro | Kiểu | Sự miêu tả |
---|---|---|
FE_DIVBYZERO | Lỗi cực | Chia cho số không |
FE_INEXACT | Không liên hệ | Kết quả không chính xác như (1.0 / 3.0) |
FE_INVALID | Lỗi tên miền | Ít nhất một đối số được sử dụng là một giá trị mà hàm không được xác định |
FE_OVERFLOW | Lỗi phạm vi tràn | Kết quả có độ lớn quá lớn để được biểu thị bằng kiểu trả về |
FE_UNDERFLOW | Lỗi phạm vi dòng chảy dưới | Kết quả có độ lớn quá nhỏ để được biểu thị bằng kiểu trả về |
FE_ALL_EXCEPT | Tất cả các trường hợp ngoại lệ | Tất cả các trường hợp ngoại lệ được hỗ trợ bởi việc triển khai |
fegetexceptflag () Giá trị trả về
- Hàm fegetexceptflag () trả về 0 nếu thành công, ngược lại thì khác.
Ví dụ: Hàm fegetexceptflag () hoạt động như thế nào?
#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; )
Khi bạn chạy chương trình, đầu ra sẽ là:
Đã tăng ngoại lệ: FE_DIVBYZERO Đã tăng ngoại lệ: FE_DIVBYZERO FE_INVALID FE_OVERFLOW Đã tăng ngoại lệ: FE_DIVBYZERO