Buna ifade ifadesi denir ve bir "lambda" (veya iç içe işlev ) oluşturur ve buna bir işaretçi döndürür. GNU C'ye özgüdür.
Makro aşağıdakilere genişler:
int (*max)(int, int) = ({ int _ (int x, int y) { return x > y ? x : y; } _; })
_
Sonunda bir gibidir return
.
Alt çizgi aslında oluşturulan ve "döndürülen" işlevin adıdır. Nadiren kullanılan bir tanımlayıcı olduğu için kullanılır (iyi bir nedenle; _
büyük olasılıkla mümkün olan en az tanımlayıcı tanımlayıcıdır).
İfade ifadesinin kullanılma nedeni, ifade ifadesinin _
kapsamı çıktıktan sonra tanımlanmayacaktır.
Yani, makrodan geçerek:
#define lambda(ret_type, _body) ({ ret_type _ _body _; })
ret_type
"lambda" nın dönüş türüdür. _
nadir bir tanımlayıcı adı olduğu için içinde kullanılan işlevin adıdır. _body
fonksiyonun argümanlarından ve gövdesinden oluşur. Sondaki _
"lambda" yı döndürür.
Bu kod Let's Destroy C'de (uygun bir isimdir) bulunur. Kullanmamalısın. Kodunuzun yalnızca GNU C uzantılarını destekleyen derleyicilerde çalışmasını sağlar. Bunun yerine, bir işlev veya makro yazın.
Bunun gibi yapılar çok kullanıyorsanız veya daha fazla özellik istiyorsanız, C ++ kullanmanızı öneririm. C ++ ile buna benzer bir şey yapabilir ve taşınabilir koda sahip olabilirsiniz.
gcc -E
Ne yaptığını görmek için sadece makroyu genişletmeyi denediniz mi (örn. İle )?