LINUX.ORG.RU

История изменений

Исправление MOPKOBKA, (текущая версия) :

Проэктом gnu продвигающим такие вот идеи в стандарт компилятора:

Единственное что этот код отличает от стандартного сишного, это вложенная функция adder. Никаких динамических лямбд тут нету, пример который это доказывает:

#include <stdio.h>
#define FN(A, X) ({int _ (int A)X _;})
typedef int(*F)(int);

F add(int a) {
  return FN(b, { return a + b; });
}

int main() {
  F f1 = add(5);
  int r1 = f1(5);
  F f2 = add(10);
  int r2 = f2(5);

  printf("%d, %d\n", f1(5), f2(5));
  printf("%d, %d\n", r1, r2);
}
15, 15
10, 15

Вложенные функции были еще в 2001 году, может и раньше, лень искать.

Исправление MOPKOBKA, :

Проэктом gnu продвигающим такие вот идеи в стандарт компилятора:

Единственное что этот код отличает от стандартного сишного, это вложенная функция adder. Никаких динамических лямбд тут нету, пример который это доказывает:

#include <stdio.h>
#define FN(A, X) ({int _ (int A)X _;})

typedef int(*F)(int);

F add(int a) {
  return FN(b, { return a + b; });
}

int main() {
  F f1 = add(5);
  int r1 = f1(5);
  F f2 = add(10);
  int r2 = f2(5);

  printf("%d, %d\n", f1(5), f2(5));
  printf("%d, %d\n", r1, r2);
}
15, 15
10, 15

Вложенные функции были еще в 2001 году, может и раньше, лень искать.

Исправление MOPKOBKA, :

Проэктом gnu продвигающим такие вот идеи в стандарт компилятора:

Единственное что этот код отличает от стандартного сишного, это вложенная функция adder. Никаких динамических лямбд тут нету, пример который это доказывает:

#include <stdio.h>
#define FN(A, X) ({int _ (int A)X _;})

typedef int(*F)(int);

F add(int a) {
  return FN(b, { return a + b; });
}

int main() {
  F f1 = add(5);
  int r1 = f1(5);
  F f2 = add(10);
  int r2 = f2(5);

  printf("%d, %d\n", f1(5), f2(5));
  printf("%d, %d\n", r1, r2);
}
15, 15
10, 15

Исходная версия MOPKOBKA, :

Проэктом gnu продвигающим такие вот идеи в стандарт компилятора:

Единственное что этот код отличает от стандартного сишного, это вложенная функция adder. Никаких динамических лямбд тут нету:

#include <stdio.h>
#define FN(A, X) ({int _ (int A)X _;})

typedef int(*F)(int);

F add(int a) {
  return FN(b, { return a + b; });
}

int main() {
  F f1 = add(5);
  int r1 = f1(5);
  F f2 = add(10);
  int r2 = f2(5);

  printf("%d, %d\n", f1(5), f2(5));
  printf("%d, %d\n", r1, r2);
}
15, 15
10, 15