Block (C-språktillägg)

Den aktuella versionen av sidan har ännu inte granskats av erfarna bidragsgivare och kan skilja sig väsentligt från versionen som granskades den 9 september 2015; kontroller kräver 8 redigeringar .

Blocks ( eng.  blocks ) är en förlängning av programmeringsspråken C , C++ , Objective-C , inte beskrivna i standarderna för dessa språk och skapade av Apple . Tillägget låter dig skapa stängningar med en lambda - liknande syntax.

"Block" skapades för att göra det lättare att skriva applikationer för Grand Central Dispatch [1] [2] -plattformen, men kan användas på andra plattformar också. Apple har implementerat "block" i sin egen gren av GCC- kompilatorn . Ett körtidsbibliotek har skapats för LLVM - kompilatorer .

"Block" är som funktioner :

Till skillnad från funktioner:

För att arbeta med block genererar kompilatorn ytterligare kod. Under programexekveringen, för varje skapat block, skapar denna kod ett dolt objekt. Objektet innehåller följande fält:

För att tala om för kompilatorn att adressen till ett "block" (snarare än en vanlig funktion) kommer att lagras i en variabel, bör ett speciellt nyckelord användas. Nyckelordet krävs inte om "blocket" och variabeln är inom samma omfång .

Exempel

I följande exempel [3] skapar funktionen ett block och returnerar en pekare till det. MakeCounter

#include <stdio.h> #include <Block.h> // skapa ett alias för pekare-till-block-typen typedef int ( ^ IntBlock ) (); IntBlock MakeCounter ( int start , int inkrement ) { __block int i = start ; returnera Block_copy ( ^ { int ret = i ; i += ökar ; return ret ; } ); } int main () { IntBlock my_counter = MakeCounter ( 5 , 2 ); printf ( "Första samtal: %d \n " , min_räknare () ); printf ( "Andra anrop: %d \n " , min_räknare () ); printf ( "Tredje anrop: %d \n " , min_räknare () ); // släpp minnet som tilldelats när du skapar blocket för att lagra det dolda objektet Block_release ( my_counter ); returnera 0 ; }

Programmet kommer att skriva ut följande.

Första samtalet: 5 Andra samtalet: 7 Tredje samtalet: 9

Kommandot för att kompilera exemplet med clang- kompilatorn är:

clang -fblocks blocks-test.c -lBlocksRuntime

Se även

Länkar

  1. Apple Technical Brief om Grand Central Dispatch Arkiverad 12 juni 2009.
  2. Mac OS X 10.6 Snow Leopard: Ars Technica-recensionen: Blocks . Hämtad 29 september 2017. Arkiverad från originalet 9 maj 2012.
  3. Bengtsson, J., Programmering med C-block på Apple-enheter , < http://thirdcog.eu/pwcblocks/ > Arkiverad 25 oktober 2010 på Wayback Machine