#define CLEANUPBLK(name) \ int __##name##_cleanup_code; \ { #define CLEANUPBEG(name, val) \ } \ __##name##_cleanup_clean: \ __##name##_cleanup_code = val; \ __##name##_cleanup_select_clean: \ switch (__##name##_cleanup_code) \ { \ case val: #define CLEANUPNEXT(name, val) \ case val: #define CLEANUPEND(name) \ default: \ goto __##name##_cleanup_break; \ goto __##name##_cleanup_clean; \ goto __##name##_cleanup_select_clean; \ } \ __##name##_cleanup_break: #define CLEANUPALL(name) \ goto __##name##_cleanup_clean #define CLEANUPBRK(name) \ goto __##name##_cleanup_break #define CLEANUPSEL(name, val) \ __##name##_cleanup_code = val; \ goto __##name##_cleanup_select_clean int main() { CLEANUPBLK() { if (!init1()) CLEANUPBRK(); if (!init2()) CLEANUPSEL(, 1); if (!init3()) CLEANUPSEL(, 2); if (!init4()) CLEANUPSEL(, 3); if (!some_func()) CLEANUPALL(); some_func2(); } CLEANUPBEG(, 0) { clean4(); } CLEANUPNEXT(, 3) { clean3(); } CLEANUPNEXT(, 2) { clean2(); } CLEANUPNEXT(, 1) { clean1(); } CLEANUPEND(); return 0; } Интересно узнать кто как решает данную проблему в языке си? init - берет ресурс, clean - освобождает ресурс. PS: Раньше на си серьезно не писал, а писал на с++ и что то слишком много макросов начал использовать.
←
1
2
→
Ответ на:
комментарий
от anonymous
Ответ на:
комментарий
от Devix
Ответ на:
комментарий
от Devix
Ответ на:
комментарий
от Devix
Ответ на:
комментарий
от anonymous
Ответ на:
комментарий
от anonymous
Ответ на:
комментарий
от anonymous
Ответ на:
комментарий
от Devix
Ответ на:
комментарий
от Devix
Ответ на:
комментарий
от anonymous
Ответ на:
комментарий
от anonymous
Ответ на:
комментарий
от Devix
Ответ на:
комментарий
от tailgunner
Ответ на:
комментарий
от Devix
Ответ на:
комментарий
от tailgunner
Ответ на:
комментарий
от Devix
Ответ на:
комментарий
от tailgunner
Ответ на:
комментарий
от Devix
Ответ на:
комментарий
от anonymous
Ответ на:
комментарий
от Devix
Ответ на:
комментарий
от tailgunner
Ответ на:
комментарий
от tailgunner
Ответ на:
комментарий
от Devix
Ответ на:
комментарий
от Devix
Ответ на:
комментарий
от Devix
Ответ на:
комментарий
от anonymous
Ответ на:
комментарий
от anonymous
Ответ на:
комментарий
от Devix
Ответ на:
комментарий
от tailgunner
Ответ на:
комментарий
от Devix
Ответ на:
комментарий
от balodja
Ответ на:
комментарий
от balodja
Ответ на:
комментарий
от Devix
Ответ на:
комментарий
от anonymous
Ответ на:
комментарий
от anonymous
Ответ на:
комментарий
от anonymous
Ответ на:
комментарий
от Devix
Ответ на:
комментарий
от lv
Ответ на:
комментарий
от Devix
Ответ на:
комментарий
от www_linux_org_ru
Ответ на:
комментарий
от www_linux_org_ru
Ответ на:
комментарий
от www_linux_org_ru
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.
Похожие темы
- Форум Си - макрос случайной строки (2007)
- Форум Понеслась (2015)
- Форум Понеслась (2008)
- Форум Телегу понесло (2017)
- Форум Ну понеслася (2007)
- Форум вызов generic_make_request из обработчика запросов блочного устройства (2019)
- Форум Макросы (2012)
- Форум Макрос (2018)
- Форум макросы (2001)
- Форум Макрос раскрывает код макроса (2018)