Bir üçüncü taraf kitaplığı Bir sorunun çözümünde çalışmaya çalışıyorum. Sorun kütüphane makro gömülü GCC en iç içe işlevlerini kullanır ve Clang iç içe işlevlerini desteklemez ve bunun için herhangi bir planı (Bkz, Clang Bug 6378 - error: illegal storage class on function) sahiptir. İşte Clang için iç içe işlevli GCC temizleme makrosunu yeniden yazınız.
beni ve Clang için ağrı noktası makro var: Burada#define RAII_VAR(vartype, varname, initval, dtor) \
/* Prototype needed due to http://gcc.gnu.org/bugzilla/show_bug.cgi?id=36774 */ \
auto void _dtor_ ## varname (vartype * v); \
void _dtor_ ## varname (vartype * v) { dtor(*v); } \
vartype varname __attribute__((cleanup(_dtor_ ## varname))) = (initval)
Ve bu nasıl onun (kod yorumlardan) kullandı:
* void do_stuff(const char *name)
* {
* RAII_VAR(struct mything *, thing, find_mything(name), ao2_cleanup);
* if (!thing) {
* return;
* }
* if (error) {
* return;
* }
* do_stuff_with_thing(thing);
* }
Clang User Manua l durumlarını C++ kullanmak ve taklit etmek için bir lambda işlevi. En iyi strateji olduğundan emin değilim ve bir C projesi olasılıkla değil bir C++ yama kabul edecek (bunlar katran olasılıkla olur ve beni ilk tüyü).
o Clang onun (1) daha uzlaşmacı, ve (2) orijinal fonksiyonu semantiğini korur, böylece makro yeniden yazmak için bir yolu var mı?
başka fail GLIBC olup. Bkz: (http://sourceware.org/glibc/wiki/FAQ#Why_do_I_get:.60.23 [I alıyorum?, GNU CC ile GNU libc'yi derlemeye çalışırken '# hatası 'glibc optimizasyonu olmadan derlenmiş edilemez''] error_.22glibc_cannot_be_compiled_without_optimization.22.27.2C_when_trying_to_compile_GNU_libc_with_GNU_CC.3F) bu arada – jww
, o Asterisk: sen clang kazanılmış varsa http://svn.asterisk.org/svn/asterisk/trunk/include/asterisk/utils.h derlemek RAII_VAR makrosu, bu katkıyı yukarı aktararak, büyük ölçüde takdir edilecektir. Bunun için birkaç açık konu var. –
Tabii ki sizden biri bu konuyla ilgili yamaya katkıda bulunmadıysa: https://issues.asterisk.org/jira/browse/ASTERISK-20850 :-) –