Benutzer:Global667/Blocks (C Spracherweiterung)

aus Wikipedia, der freien Enzyklopädie
Zur Navigation springen Zur Suche springen

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.


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
*/

Unix:

clang -fblocks blocks-test.c -lBlocksRuntime


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


Einzelnachweise

[Bearbeiten | Quelltext bearbeiten]
  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.