#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
        →
    
    
      Ответ на:
      
          комментарий
        от tailgunner 
  
    
      Ответ на:
      
          комментарий
        от www_linux_org_ru 
  
    
      Ответ на:
      
          комментарий
        от www_linux_org_ru 
  
    
      Ответ на:
      
          комментарий
        от www_linux_org_ru 
  
    
      Ответ на:
      
          комментарий
        от www_linux_org_ru 
  
    
      Ответ на:
      
          комментарий
        от alex4 
  
    
        Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.
      
  Похожие темы
- Форум Си - макрос случайной строки (2007)
 - Форум Понеслась (2015)
 - Форум Понеслась (2008)
 - Форум Телегу понесло (2017)
 - Форум Ну понеслася (2007)
 
- Форум вызов generic_make_request из обработчика запросов блочного устройства (2019)
 - Форум Макрос (2018)
 - Форум Макросы (2012)
 - Форум макросы (2001)
 - Форум Макрос раскрывает код макроса (2018)