Dưới đây là một hack:
// hack.c
int last_exit;
// hack.h
extern int last_exit;
#define exit(x) (exit)(last_exit = (x))
sẽ không làm việc cho return
, nhưng, hey, nó cầm tay!
Trên một lưu ý thân thiện hơn, bạn có thể muốn xem xét viết một số hình thức bao bọc để làm một cái gì đó tương tự như thế này cho bạn. Hacking xung quanh cách GCC thực hiện exit()
âm thanh như một cơn ác mộng bảo trì. Tốt hơn là viết một vài hàm trợ giúp để thoát ra cho bạn, và thậm chí có thể che giấu chúng bằng các macro nếu bạn đang sử dụng loại đó. Với macro, bạn thậm chí có thể thay thế các cuộc gọi return
, nếu bạn luôn gọi return
bằng dấu ngoặc đơn. Mặc dù điều này nghe có vẻ giống như một cơn ác mộng bảo trì.
Nguồn
2010-02-04 02:15:26
Cảm ơn. Có thiết lập toàn cầu của riêng tôi trước khi gọi exit() và sử dụng trong func đăng ký của tôi có vẻ như ý tưởng tốt nhất. –
Nhớ dấu ngoặc đơn quanh 'thoát' trong macro - chúng đảm bảo rằng macro sẽ không cố gọi chính nó, nhưng cho phép macro gọi hàm có cùng tên. Gần đây tôi chỉ học được mẹo đó, nhưng nó cho phép bạn tránh làm cho hack của bạn hiển nhiên rõ ràng với một thứ như '#define EXIT (x) exit (last_exit = x)'. Tất cả các mũ chỉ là xấu xí. –
Một bộ dấu ngoặc bổ sung xung quanh '(x)' trong định nghĩa macro được khuyến khích. – caf