Clang a une très bonne extension nommée block, apportant le véritable mécanisme de fonction lambda à C. Par rapport à block, les fonctions nestedes de gcc sont assez limitées. Cependant, essayer de comstackr un programme sortingvial cc
:
#include int main() { void (^ bonjour) (nul) = ^ (nul) { printf ("Bonjour, bloquez! \ n"); }; Bonjour(); retourne 0; }
avec clang -fblocks cc
, j’ai eu
/usr/bin/ld.gold: /tmp/cc-NZ7tqa.o: dans la fonction __block_literal_global: cc (.rodata + 0x10): erreur: référence indéfinie à '_NSConcreteGlobalBlock' clang: error: la commande linker a échoué avec le code de sortie 1 (utilisez -v pour voir l'invocation)
semble que je devrais utiliser clang -fblocks cc -lBlocksRuntime
, mais j’ai
/usr/bin/ld.gold: erreur: impossible de trouver -lBlocksRuntime (le rest est le même que ci-dessus)
Des indices?
Sur Ubuntu Linux:
sudo apt-get install llvm sudo apt-get install clang sudo apt-get install libblocksruntime-dev
test.c
:
#include int main() { void (^hello)(void) = ^(void) { printf("Hello, block!\n"); }; hello(); return 0; }
comstackr:
clang test.c -fblocks -lBlocksRuntime -o test ./test Hello, block!
fonctionne bien
A en juger par quelles bibliothèques vous devez vous lier pour un programme de clang utilisant des blocs, il semble qu’il n’y ait pas de moyen facile de résoudre ce problème , du moins au début de 2010.