Tôi vừa có một số hành vi kỳ lạ từ phiên bản g ++ cho Windows mà tôi có với Strawberry Perl. Nó cho phép tôi bỏ qua một tuyên bố trở lại.Bỏ qua tuyên bố trả về trong C++
Tôi có một chức năng thành viên đó trả về một cấu trúc gồm hai con trỏ, gọi là boundTag
:
struct boundTag Box::getBound(int side) {
struct boundTag retBoundTag;
retBoundTag.box = this;
switch (side)
{
// set retBoundTag.bound based on value of "side"
}
}
Chức năng này đã cho tôi một số lượng xấu, và tôi phát hiện ra rằng nó không có câu lệnh return. Tôi đã có nghĩa là để trở về retBoundTag
nhưng quên thực sự viết báo cáo trở lại. Khi tôi đã thêm return retBoundTag;
mọi thứ đều ổn.
Nhưng tôi đã thử nghiệm chức năng này và nhận được kết quả chính xác boundTag
từ nó. Ngay cả bây giờ, khi tôi loại bỏ câu lệnh return, g ++ biên dịch nó mà không cần cảnh báo. WTF? Liệu nó có trả về retBoundTag
không?
Bạn nên biên dịch bằng '-Wall'. Thiếu các câu lệnh trả về bị bắt bởi '-Wreturn-type'. – jweyrich
Tôi có xu hướng biến cảnh báo về một sự trở lại bị thiếu thành một lỗi với: '-Werror = return-type'. Đã cứu tôi rất nhiều thời gian. –