C/C++黑魔法-自动关闭文件描述符

利用宏与for循环特性自动关闭文件描述符,用来避免用户经常忘记关闭文件描述符的问题。

Open宏定义

1
2
3
#define Open(...) \
for (int _fd = open(__VA_ARGS__), _i = 1; _i; _i--, _fd >= 0 && close(_fd)) \
if (_fd >= 0)

用法

1
2
3
4
5
6
Open("test.txt", O_RDONLY) {
printf("Success!!!\n");
}
else {
printf("Failed!!!\n");
}

源码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <stdio.h>
#include <fcntl.h>

#define Open(...) \
for (int _fd = open(__VA_ARGS__), _i = 1; _i; _i--, _fd >= 0 && close(_fd)) \
if (_fd >= 0)

int main(int argc, char *argv[])
{
Open("test.txt", O_RDONLY) {
printf("Success!!!\n");
}
else {
printf("Failed!!!\n");
}

return 0;
}