3 ms·
Yes, we have discussed adding this feature at scope level. A not entirely serious proposal was to implement it as follows: #define DEFER(a, b, c) \ for
by rseacord 6y ago
Yes, we have discussed adding this feature at scope level. A not entirely serious proposal was to implement it as follows:
#define DEFER(a, b, c) \
for (bool _flag = true; _flag; _flag = false) \
for (a; _flag && (b); c, _flag = false)
int fun() {
DEFER(FILE *f1 = fopen(...), (NULL != f1), mfclose(f1)) {
DEFER(FILE *f2 = fopen(...), (NULL != f2), mfclose(f2)) {
DEFER(FILE *f3 = fopen(...), (NULL != f3), mfclose(f3)) {
... do something ...
}
}
}
}
We are also looking at the attribute cleanup. Sounds like you should be involved in developing this proposal?
- rwmj 6y agoYes, I'll ask around in Red Hat too, see if we can get some help with this.
- a1369209993 6y agoApropos of this, I'll toss in: please support do-after statements (and also let statements). do foo(); _After bar(); /* exactly equivalent to (with gcc ({})s): */ ({ bar(); foo(); }); #define DEFER(a, b, c) \ _Let(a) if(!b) {} else do {c;} _After (This is in fact a entirely serious proposal, though I don't actually expect it to happen.)