#define err(...) fprintf(stderr, __VA_ARGS__), fflush(stderr)

struct finalize {
  char *s;
  finalize( const char *fmt, ... ) {
    s = new char[999];
    va_list list;
    va_start(list, fmt);
    vsprintf(s, fmt, list);
    err(s), err(" [begin]\n");
  }
  ~finalize() {
    err(s), err(" [end]\n");
  }
};

/** Пример использования. Дебаг вывод точки входа и точки выхода из функции f(x) */
int f( int x ) {
  finalize _("f: x = %d", x);
  if (x == 1)
    return 1;
  return 2;
}