Blokkok (C nyelvi kiterjesztés)

Az oldal jelenlegi verzióját még nem ellenőrizték tapasztalt közreműködők, és jelentősen eltérhet a 2015. szeptember 9-én felülvizsgált verziótól ; az ellenőrzések 8 szerkesztést igényelnek .

A Blocks ( eng.  blocks ) a C , C++ , Objective-C programozási nyelvek kiterjesztése , amelyet ezeknek a nyelveknek a szabványai nem írnak le, és az Apple készítette . A kiterjesztés lehetővé teszi lezárások létrehozását lambda - szerű szintaxis használatával.

A "blokkokat" azért hozták létre, hogy megkönnyítsék az alkalmazások írását a Grand Central Dispatch [1] [2] platformra, de más platformokon is használhatók. Az Apple "blokkokat" valósított meg a GCC fordítóprogram saját ágában . Az LLVM fordítók számára létrehoztak egy futásidejű könyvtárat .

A "blokkok" olyanok, mint a függvények :

A függvényekkel ellentétben:

A blokkokkal való munkához a fordító további kódot generál. A program végrehajtása során ez a kód minden egyes létrehozott blokkhoz rejtett objektumot hoz létre. Az objektum a következő mezőket tartalmazza:

Ahhoz, hogy a fordító megmondja, hogy egy "blokk" címe (nem pedig egy normál függvény) egy változóban kerül tárolásra, egy speciális kulcsszót kell használni. A kulcsszó nem kötelező, ha a "blokk" és a változó ugyanabban a hatókörben van .

Példa

A következő példában [3] a függvény létrehoz egy blokkot, és visszaadja a mutatót. MakeCounter

#include <stdio.h> #include <Block.h> // álnév létrehozása a pointer-to-block típushoz typedef int ( ^ IntBlock ) (); IntBlock MakeCounter ( int start , int increment ) { __block int i = start ; return Block_copy ( ^ { int ret = i ; i += növekmény ; return ret ; } ); } int main () { IntBlock my_counter = MakeCounter ( 5 , 2 ); printf ( "Első hívás: %d \n " , my_counter () ); printf ( "Második hívás: %d \n " , my_counter () ); printf ( "Harmadik hívás: %d \n " , my_counter () ); // felszabadítja a blokk létrehozásakor lefoglalt memóriát a rejtett objektum tárolására Block_release ( my_counter ); return 0 ; }

A program a következőket nyomtatja ki.

Első hívás: 5 Második hívás: 7 Harmadik hívás: 9

A parancs a példának a clang fordítóval történő fordításához a következő:

clang -fblocks blocks-test.c -lBlocksRuntime

Lásd még

Linkek

  1. Apple Technical Brief on Grand Central Dispatch Archiválva : 2009. június 12.
  2. Mac OS X 10.6 Snow Leopard: az Ars Technica áttekintése: Blocks . Letöltve: 2017. szeptember 29. Az eredetiből archiválva : 2012. május 9..
  3. Bengtsson, J., Programming with C Blocks on Apple Devices , < http://thirdcog.eu/pwcblocks/ > Archivált : 2010. október 25. a Wayback Machine -nél