Benutzer:Global667/Blocks (C Spracherweiterung)

aus Wikipedia, der freien Enzyklopädie

Blocks sind eine im Standardisierungsprozess befindliche Erweiterung für die Programmiersprachen C, C++, Objective-C und Objective C++ von Apple. Sie nutzen eine aus anderen Sprachen bekannte lambda-expression ähnliche Syntax. Hiermit ist es möglich Closures wie in anderen Sprachen zu erstellen. Blocks finden Unterstützung durch Mac OS X seit der Version 10.6 und unter iOS gibt es sie seit Version 4.0[1].

Apple entwickelte Blocks im Hinblick auf eine einfachere Handhabung ihrer Threading Architektur Grand Central Dispatch, trotzdem ist es ein eigenständiges System und hat viele Parallelen zu den Closures in anderen Sprache. Blocks wurden sowohl in die GNU Compiler Collection als auch in Clang LLVM integriert.Das LLVM Project unterstützt Blocks auch in ihrer Laufzeit-Bibliothek.


Beispiel

Ein Beispiel, das die veränderliche Sichtbarkeit eines Integer demonstriert. : [2]

#include <stdio.h>
#include <Block.h>

typedef int (^IntBlock)();

IntBlock MakeCounter(int start, int increment) {

	__block int i = start;
	return Block_copy( ^ {
	int ret = i;
	i += increment;
	return ret;
	});
}

int main(void) {
	IntBlock mycounter = MakeCounter(5, 2);
	printf("First call: %d\n", mycounter());
	printf("Second call: %d\n", mycounter());
	printf("Third call: %d\n", mycounter());
	
	/* weil es kopiert wurde, muss es auch geloescht werden */
	Block_release(mycounter);
	
	return 0;
}

/* Output:
	First call: 5
	Second call: 7
	Third call: 9
*/

Compilieren

Unix:

clang -fblocks blocks-test.c -lBlocksRuntime


Siehe auch

  • C++0x (includes "lambda expressions")


Einzelnachweise

  1. Apple Inc.: Blocks Programming Topics. Abgerufen am 20. Januar 2013.
  2. :J. Bengtsson: Programming with C Blocks on Apple Devices. Abgerufen am 20. Januar 2013.

Weblinks