Blokke (C-sprog udvidelse)

Den aktuelle version af siden er endnu ikke blevet gennemgået af erfarne bidragydere og kan afvige væsentligt fra den version , der blev gennemgået den 9. september 2015; checks kræver 8 redigeringer .

Blocks ( eng.  blocks ) er en udvidelse af programmeringssprogene C , C++ , Objective-C , ikke beskrevet i standarderne for disse sprog og skabt af Apple . Udvidelsen giver dig mulighed for at oprette lukninger ved hjælp af en lambda - lignende syntaks.

"Blocks" blev oprettet for at gøre det nemmere at skrive applikationer til Grand Central Dispatch [1] [2] platformen, men kan også bruges på andre platforme. Apple har implementeret "blokke" i sin egen gren af ​​GCC - kompileren . Et runtime-bibliotek er blevet oprettet til LLVM - kompilere .

"Blokkere" er ligesom funktioner :

I modsætning til funktioner:

For at arbejde med blokke genererer compileren ekstra kode. Under programafviklingen opretter denne kode for hver blok, der er oprettet, et skjult objekt. Objektet indeholder følgende felter:

For at fortælle compileren, at adressen på en "blok" (i stedet for en almindelig funktion) vil blive gemt i en variabel, skal der bruges et særligt nøgleord. Nøgleordet er ikke påkrævet, hvis "blokken" og variablen er i samme omfang .

Eksempel

I det følgende eksempel [3] opretter funktionen en blok og returnerer en markør til den. MakeCounter

#include <stdio.h> #include <Blok.h> // oprettelse af et alias for pointer-to-block typen typedef int ( ^ IntBlock ) (); IntBlock MakeCounter ( int start , int stigning ) { __blok int i = start ; returner Block_copy ( ^ { int ret = i ; i += stigning ; returnere ret ; } ); } int main () { IntBlock my_counter = MakeCounter ( 5 , 2 ); printf ( "Første opkald: %d \n " , min_tæller () ); printf ( "Andet opkald: %d \n " , min_tæller () ); printf ( "Tredje opkald: %d \n " , min_tæller () ); // frigiv den hukommelse, der er allokeret ved oprettelse af blokken for at gemme det skjulte objekt Block_release ( my_counter ); returnere 0 ; }

Programmet udskriver følgende.

Første opkald: 5 Andet opkald: 7 Tredje opkald: 9

Kommandoen til at kompilere eksemplet med clang- kompileren er:

clang -fblocks blocks-test.c -lBlocksRuntime

Se også

Links

  1. Apple Technical Brief om Grand Central Dispatch Arkiveret 12. juni 2009.
  2. Mac OS X 10.6 Snow Leopard: Ars Technica-anmeldelsen: Blocks . Hentet 29. september 2017. Arkiveret fra originalen 9. maj 2012.
  3. Bengtsson, J., Programmering med C-blokke på Apple-enheder , < http://thirdcog.eu/pwcblocks/ > Arkiveret 25. oktober 2010 på Wayback Machine