Макрос схемы для вложенных выражений

delete [] - что-то, что не new [], ни ваше, строго противопоказано.

Посмотрите на эти строки:

uint8_t testBytes[] = {1, 2, 3, 4};
std::unique_ptr<uint8_t[]> testBytesPtr = std::make_unique<uint8_t[]>(4);
testBytesPtr.reset(testBytes);

Удаление нерелевантного эфемерного динамического распределения оставляет:

uint8_t testBytes[] = {1, 2, 3, 4};
std::unique_ptr<uint8_t[]> testBytesPtr(testBytes);

Что вызывает неопределенное поведение при включении dtor.

По общему признанию, вы перемещаете std::unique_ptr один раз, но это просто сдвигает точную точку, где происходит взрыв.

5
задан Claudiu 4 December 2008 в 10:50
поделиться

3 ответа

(define bop list)

(define-syntax op
  (syntax-rules ()
    ((op a b) (bop a b))
    ((op a b c ...) (op (bop a b) c ...))))

Например, (op 1 2 3 4) расширяется до (bop (bop (bop 1 2) 3) 4) и оценивает к (((1 2) 3) 4).

6
ответ дан 14 December 2019 в 09:03
поделиться

Функция Вы хотите обратиться к аргументам, должна самостоятельно быть аргументом макросу. Запрещая это, моим решением было то же.

#!r6rs

(import (rnrs base))

(define-syntax claudiu
  (syntax-rules ()
    ((claudiu fun first second)
     (fun first second))
    ((claudiu fun first second rest ...)
     (claudiu fun (claudiu fun first second) rest ...))))
1
ответ дан 14 December 2019 в 09:03
поделиться

Чтобы показать, как ответ удается:

(op 1 2 3 4)

Это - op с 4 операторами, таким образом, 2-й случай выбран с a=1, b=2, c=3... =4:

(op (bop 1 2) 3 4)

Это - op с 3 операторами, так 2-й случай снова. = (танцуют бибоп 1 2), b=3, c=4:

(op (bop (bop 1 2) 3) 4)

Теперь это - бибоп с 2 операторами, таким образом, = (бибоп (бибоп 1 2) 3), b=4, и он сделан.

0
ответ дан 14 December 2019 в 09:03
поделиться
Другие вопросы по тегам:

Похожие вопросы: