Hàm fesetexceptflag () trong C ++ đặt các cờ ngoại lệ dấu chấm động được chỉ định từ một đối tượng con trỏ vào môi trường dấu chấm động.
Hàm fesetexceptflag () được định nghĩa trong tệp tiêu đề.
nguyên mẫu fesetexceptflag ()
int fesetexceptflag (const fexcept_t * flagp, int exceptions);
Hàm fesetexceptflag () cố gắng sao chép tất cả nội dung của các cờ ngoại lệ dấu phẩy động được chỉ định bởi các ngoại lệ từ flagp vào môi trường dấu phẩy động.
Hàm này chỉ sửa đổi các cờ và không đưa ra bất kỳ ngoại lệ nào.
Thông số fesetexceptflag ()
- flagp: Một con trỏ đến đối tượng fexcept_t nơi các cờ sẽ được đọc từ đó.
- ngoại lệ: Bitmask liệt kê các cờ ngoại lệ cần đặt.
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 |
fesetexceptflag () Giá trị trả về
- Hàm fesetexceptflag () trả về 0 khi thành công, ngược lại thì khác.
Ví dụ: Hàm fesetexceptflag () 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