C/C++代码异常处理技巧
在dbgger上看到这个小技巧,这样写代码真的很比我用goto优雅多了,特别是很多种异常需要处理时,一个处理函数中将有无数个goto来goto去的,虽然只是向一个方向跳,但还是好乱。当然Goto灵活性还是比较好的,可能会给阅读造成障碍。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 | NTSTATUS SetLocalVersion(PUNICODE_STRING pUnFileName,PVOID pVersion) { NTSTATUS status; HANDLE hFile; ULONG ulRet; IO_STATUS_BLOCK iostatus; OBJECT_ATTRIBUTES objectattributes; do { InitializeObjectAttributes(&objectattributes,pUnFileName,OBJ_CASE_INSENSITIVE,NULL,NULL); status = ZwCreateFile(&hFile, FILE_ALL_ACCESS, &objectattributes, &iostatus, NULL, FILE_ATTRIBUTE_NORMAL, FILE_SHARE_READ | FILE_SHARE_WRITE, FILE_OPEN_IF, FILE_SYNCHRONOUS_IO_NONALERT, NULL, 0); if (!NT_SUCCESS(status)) { break; } status = ZwWriteFile(hFile, NULL, NULL, NULL, &iostatus, pVersion, strlen((char*)pVersion), NULL, NULL); if (!NT_SUCCESS(status)) { ZwClose(hFile); break; } ZwClose(hFile); } while (0); return status; } |