- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
//
// Замена блоков __try/__finally нашей реализацией. Примеры использования:
// NTSTATUS SomeFunc() {
// X *p = NULL;
// NTSTATUS status = STATUS_SUCCESS;
// Try {
// p = new(NonPagedPool) X;
// if (!p) Leave(status = STATUS_INSUFFICIENT_RESOURCES);
//
// status = SomeKernelFunc();
// LeaveNS(status = STATUS_UNSUCCESSFUL);
// } Finally {
// if (p) delete p;
// }
// return status;
// }
//
#define Try if (1)
#define Finally try_exit: NOTHING
#define Leave(s) { s; goto try_exit; }
#define LeaveNS(s) {if (!NT_SUCCESS(status)) Leave(s);}
#define Run(s) {status = s; LeaveNS(;);}
3.14159265 16.09.2010 17:29 # +4
absolut 16.09.2010 17:51 # 0
P.s. велик и могуч препроцессор си
rat4 16.09.2010 18:08 # 0
TheCalligrapher 16.09.2010 18:10 # −2
TheCalligrapher 16.09.2010 19:18 # 0
Govnoeb 17.09.2010 11:48 # +1
guest 23.03.2012 18:02 # 0