В компилятор GCC, воходящий в состав Mac OS X 10.6, была добавлен новый, полезный тип данных – блоки. По поведению и объявлению блоки очень похожи на функции:
blockReturningIntTakingChar = ^int (char arg) { return arg*10; };
int n = blockReturningIntTakingChar(‘a’);
Использование нового типа позволяет упростить код, например, сортировка с использованием блоков будет выглядеть следующим образом:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main (int argc, const char * argv[]) {
char *strings[4] = { "Masha", "Vasya", "Dima", "Petya" };
qsort_b( strings, 4, sizeof(char*), ^(const void* l, const void *r) {
char *left = *(char**)l;
char *right = *(char**)r;
return strncmp( left, right, 1 );
});
return 0;
}
Apple представил это расширение на рассмотрение рабочей группой по разработке стандарта языка C как
N1370: Apple’s Extensions to C. Хочется надеятся что в скором времени данная фича будет работать не только на Mac OS X.