生活的天平本不平衡,只有通过努力改变其偏向。

C/C++代码异常处理技巧

2010-05-07

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;
}
作者:lonkil | 分类目录:编程开发 | 标签:

发表评论

电子邮件地址不会被公开。 必填项已用 * 标注

*

您可以使用这些 HTML 标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>