Từ 1 tới 10 trên tổng số 10 kết quả

Đề tài: try/catch trong VC++ có tác dụng thế nào?

  1. #1
    Ngày gia nhập
    01 2008
    Bài viết
    240

    Mặc định try/catch trong VC++ có tác dụng thế nào?

    anh chị em cho hỏi try/catch trong VC++ hình như không làm việc thì phải
    mình có mỗi lệnh thế này mà không làm việc
    Code:
    int c=0;
    int m=0;
    try{
    	printf("%d",m/c);
    	}catch(int gB){}
    nó chết ngay trong dòng bôi đỏ!
    thanks

  2. #2
    Ngày gia nhập
    07 2006
    Nơi ở
    Hanoi, Vietnam
    Bài viết
    2,750

    Thử cái này đi:
    C++ Code:
    1. try{
    2.     if(c == 0) throw 0;
    3.     printf("%d",m/c);
    4. }
    5. catch(int gB)
    6. {
    7.     printf("%d", gB);
    8. }

    Bạn nên tìm đọc các bài viết sau:
    try - throw - catch trong C++ có tác dụng gì?
    Exceptions, try, throw và catch có mục đích và tác dụng gì?

    Còn có rất nhiều bài viết trao đổi rất hay, nhưng tiêu đề đề tài ngu xuẩn nên tìm không thấy hoặc đã bị xóa. Bạn có thể bỏ chút thời gian tìm kiếm trên cộng đồng C Việt sẽ có nhiều kết quả tốt đó!
    Email: admin[@]congdongcviet.com | CC to: info[@]congdongcviet.com
    Phone: 0972 89 7667 (Office: 04 6329 2380)
    Yahoo & Skype: dreaminess_world (Vui lòng chỉ rõ mục đích ngay khi liên hệ, cảm ơn!)

    Một người nào đó coi thường ý thức kỷ luật cũng có nghĩa là người đó đã coi thường tương lai số phận của chính bản thân người đó. Những người coi thường ý thức kỷ luật sẽ không bao giờ có được sự thành công trong sự nghiệp!

  3. #3
    Ngày gia nhập
    01 2008
    Bài viết
    240

    thanks KV
    đoạn code nhỏ trên chỉ là 1 ví dụ minh họa thôi. mình đang cần 1 đoạn code để bắt được exception tổng quát, kiểu như try/catch trong java hay .net. nhưng try/catch trong C++ làm việc hơi kém!

  4. #4
    Ngày gia nhập
    01 2012
    Bài viết
    24

    Theo standard thì các exception của C++ đều kế thừa từ std::exception.

    Phần lớn các library cũng làm như vậy.

    Có một cách để catch tất cả các thể loại exception là catch (...), nhưng chả để làm gì.
    Đã được chỉnh sửa lần cuối bởi Jangdeon : 04-01-2012 lúc 02:04 PM.
    Tuesday 03 January 2012
    Battery Level, 69%

  5. #5
    Ngày gia nhập
    01 2012
    Bài viết
    24

    À không để ý trường hợp của cậu, nếu là divide by zero thì C++ không coi nó là exception, chỉ là design thôi. Cũng như dereference null pointer, đó rõ ràng là bug và coder phải fix. Exception là một cách để control program chứ không phải là để tránh (ignore) bug.

    Nếu là POSIX thì OS sẽ trigger SIGFPE, cậu có thể handle nó để report (đừng cố dùng nó để ignore, đó là bug, không phải exception).
    Tuesday 03 January 2012
    Battery Level, 69%

  6. #6
    Ngày gia nhập
    01 2008
    Bài viết
    240

    Mặc định try/catch trong VC++ có tác dụng thế nào?

    thanks các bạn.
    Vấn đề cảu mình cụ thể nhưu sau:
    mình có 1 hàm làm thứ tự các việc sau:
    1-đọc file PDF
    2- ghi file PDF này thành ảnh
    do thư viện của KH lởm nên 1 số file thì cả 2 việc trên đều OK. nhưng 1 số file lại bị chết.
    với những file bị chết mình phải bắn ra được message là thông báo bị chết. nhưng khi mình dùng try/catch thì nó chết ngay mà không chụi vào catch.
    Đó vấn đề là vậy
    thanks các cậu

  7. #7
    Ngày gia nhập
    01 2012
    Bài viết
    24

    Muốn handle cũng được, nhưng không có cách nào cross platform cả, tại phải theo standard của C++.

    Nếu chạy trên mỗi Windows thì Windows nó có một extension để catch divide by zero là SEH Exceptions, vì không phải standard nên bình thường nó disable đi.

    Project Properties -> C/C++ -> Code Generation -> Enable C++ Exceptions to "Yes With SEH Exceptions".

    catch (...) là nó nhảy vào đấy, muốn lấy thông tin thì dùng GetExceptionInformation vs GetExceptionCode.
    Tuesday 03 January 2012
    Battery Level, 69%

  8. #8
    Ngày gia nhập
    01 2008
    Bài viết
    240

    Trích dẫn Nguyên bản được gửi bởi Jangdeon Xem bài viết
    Muốn handle cũng được, nhưng không có cách nào cross platform cả, tại phải theo standard của C++.

    Nếu chạy trên mỗi Windows thì Windows nó có một extension để catch divide by zero là SEH Exceptions, vì không phải standard nên bình thường nó disable đi.

    Project Properties -> C/C++ -> Code Generation -> Enable C++ Exceptions to "Yes With SEH Exceptions".

    catch (...) là nó nhảy vào đấy, muốn lấy thông tin thì dùng GetExceptionInformation vs GetExceptionCode.
    làm theo cách của cậu mà nó vấn y như cũ không được

  9. #9
    Ngày gia nhập
    01 2012
    Bài viết
    24

    Hơi vô lý nhỉ.

    C++ Code:
    1. #include <exception>
    2. #include <iostream>
    3.  
    4. int main()
    5. {
    6.     try
    7.     {
    8.         int a = 0;
    9.         int b = 1;
    10.         b /= a;
    11.     }
    12.     catch (...)
    13.     {
    14.         std::cout << "Error!" << std::endl;
    15.     }
    16.  
    17.     std::cin.get();
    18.  
    19.     return 0;
    20. }

    Cái này chạy mà, cậu xem lại xem đã enable cái SEH Exception chưa.

    Project Properties -> C/C++ -> Code Generation -> Enable C++ Exceptions to "Yes With SEH Exceptions".
    Đã được chỉnh sửa lần cuối bởi Jangdeon : 04-01-2012 lúc 03:00 PM.
    Tuesday 03 January 2012
    Battery Level, 69%

  10. #10
    Ngày gia nhập
    01 2008
    Bài viết
    240

    thank cậu
    chạy mượt cậu ạ
    thanks

Các đề tài tương tự

  1. Sử dụng try {} catch{} để làm gì trong lập trình?
    Gửi bởi ChuotNhat3k trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 23
    Bài viết cuối: 28-02-2017, 06:35 PM
  2. try - throw - catch trong C++ có tác dụng gì?
    Gửi bởi hirikarate trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 9
    Bài viết cuối: 26-11-2011, 11:03 PM
  3. Sử dụng try{} catch{} trong lập trình C++?
    Gửi bởi shesap trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 4
    Bài viết cuối: 07-01-2011, 04:05 PM
  4. Thắc mắc về từ khóa finally trong try, catch.
    Gửi bởi danielle2009 trong diễn đàn Nhập môn lập trình C#, ASP.NET
    Trả lời: 7
    Bài viết cuối: 03-08-2010, 08:09 PM
  5. Xử lý lỗi như thế nào bằng throw, catch
    Gửi bởi iamme22021990 trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 2
    Bài viết cuối: 31-01-2010, 07:36 PM

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn