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

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.
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

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

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