Re[12]: Разработка на чистом C
От: push  
Дата: 02.11.16 12:19
Оценка:
Здравствуйте, kov_serg, Вы писали:

_>Почему слабо — изображу например так:

_>
_>// m.h
_>int  m_init(void** h);
_>int  m_fn(void *h);
_>void m_done(void** h);

_>// m.c
_>#include "m.h"
_>#include "m1.h"
_>#include "m2.h"

_>typedef struct {
_>  void *h1,*h2;
_>} M;

_>int m_init(void** h) {
_>  M *m; int r=1;
_>  m=(M*)malloc(sizeof(M)); 
_>  *h=m; if (!m) return 1;
  m->>h1=0;
  m->>h2=0;
_>  if (m1_init(&m->h1)) goto leave;
_>  if (m2_init(&m->h2)) goto leave;
_>  r=0;
_>leave: 
_>  if(r) m_done(h);
_>  return r;
_>}

_>void m_done(void** h) {
_>  if (*h) {
_>    M* m=(M*)*h;
_>    m2_done(&m->h2);
_>    m1_done(&m->h1);
_>    free(m);
_>    *h=0;
_>  }
_>}

_>int m_fn(void* h) {
_>  M *m=(M*)h;int r=1;
_>  if (m1_fn(m->h1)) goto fail;
_>  if (m2_fn(m->h2)) { r=2; goto fail; }
_>  r=0;
_>fail:
_>  return r;
_>}
_>


Это и есть самые типичные макароны. При увеличении количества ресурсов будет всё веселее и веселее.
Чисто на вскидку, даже учитывая что для уменьшения размеров ты писал по нескольку операторов на строке чего в реальном проекте тебе никто не даст сделать, посмотри сколько у тебя значимых строк (которые выполняют полезную работу), и сколько вспомогательных/технических (по сути мусор) — которые нужны только для обеспечения корректной работы значимых строк. В случае RAII и исключений количество технических строк будет равно нулю.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.