Bloky (rozšíření jazyka C)

Aktuální verze stránky ještě nebyla zkontrolována zkušenými přispěvateli a může se výrazně lišit od verze recenzované 9. září 2015; kontroly vyžadují 8 úprav .

Blocks ( angl.  Blocks ) je rozšířením programovacích jazyků C , C++ , Objective-C , které není popsáno ve standardech těchto jazyků a je vytvořeno společností Apple . Rozšíření umožňuje vytvářet uzávěry pomocí syntaxe podobné lambda .

„Bloky“ byly vytvořeny, aby usnadnily psaní aplikací pro platformu Grand Central Dispatch [1] [2] , ale lze je použít i na jiných platformách. Apple implementoval „bloky“ do své vlastní větve kompilátoru GCC . Pro kompilátory LLVM byla vytvořena runtime knihovna .

"Bloky" jsou jako funkce :

Na rozdíl od funkcí:

Pro práci s bloky kompilátor generuje další kód. Během provádění programu vytvoří tento kód pro každý vytvořený blok skrytý objekt. Objekt obsahuje následující pole:

Chcete-li kompilátoru říci, že adresa "bloku" (spíše než běžné funkce) bude uložena v proměnné, je třeba použít speciální klíčové slovo. Klíčové slovo není povinné, pokud jsou "blok" a proměnná ve stejném rozsahu .

Příklad

V následujícím příkladu [3] funkce vytvoří blok a vrátí na něj ukazatel. MakeCounter

#include <stdio.h> #include <Block.h> // vytvoření aliasu pro typ ukazatele na blok typedef int ( ^ IntBlock ) (); IntBlock MakeCounter ( int start , int increment ) { __block int i = start ; return Block_copy ( ^ { int ret = i ; i += přírůstek ; vrátit ret ; } ); } int main () { IntBlock my_counter = MakeCounter ( 5 , 2 ); printf ( "První volání: %d \n " , moje_počítadlo () ); printf ( "Druhé volání: %d \n " , moje_počítadlo () ); printf ( "Třetí volání: %d \n " , moje_počítadlo () ); // uvolnění paměti přidělené při vytváření bloku pro uložení skrytého objektu Block_release ( my_counter ); návrat 0 ; }

Program vytiskne následující.

První hovor: 5 Druhý hovor: 7 Třetí hovor: 9

Příkaz pro kompilaci příkladu pomocí kompilátoru clang je:

clang -fblocks blocks-test.c -lBlocksRuntime

Viz také

Odkazy

  1. Technický přehled Apple o Grand Central Dispatch Archivováno 12. června 2009.
  2. Mac OS X 10.6 Snow Leopard: recenze Ars Technica: Bloky . Získáno 29. září 2017. Archivováno z originálu 9. května 2012.
  3. Bengtsson, J., Programming with C Blocks on Apple Devices , < http://thirdcog.eu/pwcblocks/ > Archivováno 25. října 2010 na Wayback Machine