C ++ fegetexceptflag () - Thư viện chuẩn C ++

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.
Bitmask chấp nhận macro
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

thú vị bài viết...