История изменений
Исправление 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