LINUX.ORG.RU

В стандарт C предложено внести лямбды и defer из golang

 , ,


5

6

Привет, ЛОР!

Я тут тебе немного покушать принёс. Как ты, наверное знаешь, не за горами выход нового стандарта языка C – C23. Среди прочих вкусностей, таких как лямбды в стиле C++, в этот стандарт предложено добавить механизм defer, аналогичный существующему в языке Go.

Ссылка на предложение: http://www.open-std.org/jtc1/sc22/wg14/www/docs/n2895.htm

В случае, если этот стандарт будет принят, будет возможно написание вот такого кода:

p = malloc(N);
defer { free(p); }

Где аргументом оператора defer является анонимная функция. Так же возможны более сложные варианты использования:

enum { initial = 16, };
double buffer[initial] = { 0 };
...
size_t elements = 0;
double* q = buffer;
defer [orig = q, &q]{ if (orig != q) { free(q); }};
...
// increase elements somehow
...
// adjust the buffer
if (elements > initial) {
    double* pp = (q == buffer) ? malloc(sizeof(double[elements])) : realloc(q, sizeof(double[elements]));
    if (!pp) return EXIT_FAILURE;
    q = pp;
}
...

Учитывая всё это, скоро в C больше не будет нужно использовать goto вообще нигде, даже для очистки ресурсов при ошибке. Так заживём, ЛОР!

★★★★★
Ответ на: комментарий от vlad9486

Я не писал о вредности goto.

Извините! …

У меня иногда посты бывают не относящиеся непосредственно к предыдущему посту, а обсуждение темы в целом.
Поэтому иногда озаглавливаю посты …

Владимир

anonymous
()
Ответ на: комментарий от vlad9486

Я не писал о вредности goto.

Экий вы ВРЕДИНА … Пойдемте лучше погуляем, погоды нынче замечательные.

Владимир

anonymous
()
Ответ на: комментарий от anonymous

А вы вредный

Владимир

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.