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

Đề tài: Một số kinh nghiệm tránh các lỗi trong C

  1. #1
    Ngày gia nhập
    08 2006
    Nơi ở
    Hải Phòng
    Bài viết
    218

    Mặc định Một số kinh nghiệm tránh các lỗi trong C

    1.Nhầm lẫn giữa phép gán = với phép so sánh ==
    Ví dụ:
    Thay vì viết
    if (x==2)
    Ta lại viết
    if (x=2)
    Lỗi này đôi khi gây nên những sai lầm tai hại nhất là trong các biểu thức
    Ví dụ
    Thay vì gán
    x=2
    Ta lại viết
    x==2
    Do câu lệnh trên là một biểu thức so sánh nó sẽ trả về giá trị True hoặc False, câu lệnh chạy sai do x không được gán, tuy nhiên trình duyệt lại không báo lỗi
    Năm 1993, nhóm phát triển hệ điều hành tại SunSoft đã rất vất vả mới phát hiện được một đoạn chương trình chạy sai do lỗi như trên, người đánh máy thay vì đánh một dấu = đã đánh thành ==.
    Cách khắc phục:
    Khi dùng phép so sánh các bạn có thể viết số trước viết biến sau. Ví dụ
    3==i
    Nếu vô ý xoá mất một dấu = thì trình biên dịch sẽ báo lỗi ngay lập tức.

  2. #2
    Ngày gia nhập
    08 2006
    Nơi ở
    TpHCM
    Bài viết
    202

    Nếu sử dụng VC, bật warning level 3, sẽ nhận được những cảnh báo về vấn đề trên

  3. #3
    Ngày gia nhập
    08 2006
    Nơi ở
    Hải Phòng
    Bài viết
    218

    Mấy cái này dịch từ sách, nên chưa có thời gian kiểm nghiệm xem có thông báo hay không.
    Mình chạy thử bằng TC++ thì nó báo lỗi Code Has No Effect tại dòng lệnh sai, nhưng sau khi đã biên dịch và chạy thử thì nó chẳng thông báo thêm lỗi gì nữa.
    Thử lại mình cũng thấy có thêm một tác hại của lỗi này như sau
    Một sô người thường hay dùng câu lệnh sau để khởi tạo cho hai hoặc nhiều biến
    a=b=0;
    Sau câu lệnh thì cả a và b đều nhận giá trị 0
    Câu lệnh nếu bị sửa thành
    a=b==2 thì vẫn chạy đúng tuy nhiên khi đó a sẽ nhận giá trị true (khác 0) hoặc False bằng 0. Chương trình chạy sai nhưng trình duyệt không báo lỗi.

  4. #4
    No Avatar
    kiem_sau_roi_le Khách

    Trích dẫn Nguyên bản được gửi bởi hailoc12
    Mấy cái này dịch từ sách, nên chưa có thời gian kiểm nghiệm xem có thông báo hay không.
    Mình chạy thử bằng TC++ thì nó báo lỗi Code Has No Effect tại dòng lệnh sai, nhưng sau khi đã biên dịch và chạy thử thì nó chẳng thông báo thêm lỗi gì nữa.
    Thử lại mình cũng thấy có thêm một tác hại của lỗi này như sau
    Một sô người thường hay dùng câu lệnh sau để khởi tạo cho hai hoặc nhiều biến
    a=b=0;
    Sau câu lệnh thì cả a và b đều nhận giá trị 0
    Câu lệnh nếu bị sửa thành
    a=b==2 thì vẫn chạy đúng tuy nhiên khi đó a sẽ nhận giá trị true (khác 0) hoặc False bằng 0. Chương trình chạy sai nhưng trình duyệt không báo lỗi.
    a=b==2 <=== ở đây sẽ không báo lỗi bởi nó se hiểu là b gán giá trị cho a và a so sánh với 2 nó sẽ giống như thế này
    a=b
    a==2

  5. #5
    Ngày gia nhập
    08 2006
    Nơi ở
    Hải Phòng
    Bài viết
    218

    Thứ tự ưu tiên của phép == đứng trước phép = do đó câu lệnh sẽ giống như thế này
    So sánh b==2 rồi gán cho a

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

  1. Hà Nội Tuyển lập trình viên .NET (chấp nhận người chưa có kinh nghiệm hoặc kinh nghiệm dưới 1 năm)
    Gửi bởi nccnm trong diễn đàn Tuyển dụng - Việc làm CNTT
    Trả lời: 0
    Bài viết cuối: 20-09-2013, 10:46 AM
  2. Trả lời: 1
    Bài viết cuối: 05-06-2013, 03:24 PM
  3. Cần tìm gia sư ASP.NET có kinh nghiệm trong dự án thực tế!
    Gửi bởi tonyanh49 trong diễn đàn Giải trí - Thư giãn
    Trả lời: 1
    Bài viết cuối: 22-07-2012, 02:45 PM
  4. Trả lời: 7
    Bài viết cuối: 18-02-2011, 01:08 PM
  5. Một số kinh nghiệm trong Mysql
    Gửi bởi C&C++ trong diễn đàn Thủ thuật, Tutorials Database
    Trả lời: 0
    Bài viết cuối: 18-07-2010, 08:45 AM

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