Được khẳng định (sai) bị bỏ qua trong chế độ phát hành (VC++)?được khẳng định (sai) bị bỏ qua trong chế độ phát hành (VC++)?
Trả lời
Nếu biên dịch trong chế độ phát hành bao gồm xác định NDEBUG, thì có.
Xem assert (CRT)
IIRC, khẳng định (x) là một macro đánh giá thành không có gì khi NDEBUG được xác định, là tiêu chuẩn cho bản dựng Bản phát hành trong Visual Studio.
Chỉ khi NDEBUG được xác định, tôi nghĩ (mặc định nó sẽ là ứng dụng Visual C++).
Macro khẳng định (ít nhất nó thường là macro) thường được xác định là không có-op trong mã phát hành. Nó sẽ chỉ kích hoạt trong mã gỡ lỗi. Có nói rằng. Tôi đã làm việc ở những nơi đã xác định macro khẳng định của riêng mình và nó được kích hoạt trong cả chế độ gỡ lỗi và chế độ phát hành.
Tôi được dạy sử dụng các khẳng định cho điều kiện có thể "không bao giờ" là sai, chẳng hạn như các điều kiện trước cho một hàm.
Tôi nghĩ rằng đó là một sai lầm phải dựa quá nhiều vào hành vi chính xác của assert. Ngữ nghĩa chính xác của "khẳng định (expr)" là:
- Biểu thức expr có thể hoặc không thể đánh giá.
- Nếu expr là đúng, thực thi tiếp tục bình thường.
- Nếu expr là sai, điều xảy ra là không xác định.
Ngữ nghĩa chính xác được mô tả trong ISO C. Nếu xác nhận được bật ('NDEBUG' không được xác định trước khi bao gồm'
tương tự cho GNU:
#ifdef NDEBUG
# define assert(expr) (__ASSERT_VOID_CAST (0))
- 1. C++ Xcode khẳng định được đánh giá trong bản phát hành
- 2. điểm Break trong chế độ phát hành
- 3. Làm cách nào để biết NSAssert có bị tắt trong bản phát hành bản phát hành không?
- 4. Chỉ định định dạng: "xml" bị bỏ qua với render_to_string
- 5. Lấy số dòng từ pdb trong chế độ phát hành
- 6. Debug.Assert Xuất hiện trong Chế độ Phát hành
- 7. NLog Không ở Chế độ Phát hành trong IIS7
- 8. Android-- PhoneGap/WebView bỏ qua thẻ meta chế độ xem?
- 9. Bỏ qua hàng trong chế độ xem danh sách
- 10. Chế độ xem bỏ qua chiều rộng tùy chỉnh
- 11. Tóm tắt, nhận xét XML được định dạng sai được bỏ qua cho thành viên
- 12. chuyển đổi mã giữa chế độ gỡ lỗi và chế độ phát hành trong java - android
- 13. Viết cho Debug ở chế độ phát hành
- 14. Làm thế nào để đưa khẳng định vào bản phát hành trong C/C++
- 15. locationInView bỏ qua định hướng
- 16. git - bỏ qua tập tin dựa trên chế độ
- 17. bị bỏ qua trong fs.readFile
- 18. Làm thế nào để gỡ lỗi trong chế độ phát hành?
- 19. Galaxy Nexus Bỏ qua thẻ meta chế độ xem
- 20. Đóng gói các dự án NuGet được biên dịch trong chế độ phát hành?
- 21. Debug.Assert có tạo ra IL ở chế độ phát hành không?
- 22. phím shift chỉ bị bỏ qua sau khi một phím khác đã bị khóa, phím shift kém. Làm thế nào để phát hiện khi nó được phát hành?
- 23. Hành động khẳng định được chuyển hướng để sửa hành động/tuyến đường?
- 24. iexplore.exe.config bị bỏ qua
- 25. Mở rộng lớp với mới XUnit Khẳng định khẳng định
- 26. Scrapy SgmlLinkExtractor bị bỏ qua là bỏ qua các liên kết được phép
- 27. EXTRA_VIDEO_QUALITY bị bỏ qua
- 28. Console.ReadLine bị bỏ qua
- 29. Bí danh bị bỏ qua trong OrderBy
- 30. Hành động url Javascript trong chế độ xem dao cạo
Các tài liệu khẳng định "Những thói quen khẳng định là có sẵn trong cả hai phiên bản phát hành và gỡ lỗi các thư viện C thời gian chạy." Tuy nhiên, nhìn vào header assert.h, chắc chắn rằng việc xác định NDEBUG trước khi bao gồm nó sẽ gây ra khẳng định() để biên dịch thành một no-op. Tuy nhiên, hoàn toàn có thể cho mã chế độ phát hành không xác định NDEBUG gây ra một xác nhận để hủy bỏ. Tôi chỉ muốn làm rõ sự hiểu biết của riêng tôi và chia sẻ những gì tôi tìm thấy. –