C++ 17, [[maybe_unused]] özniteliğini sunar.
Bu, GCC ve Clang'ın standart bir sürümü olduğunu varsayalım: __attribute__((unused)).[[kullanılmamış]] işlev bildirimleri veya tanımları üzerine koydum mu?
,
ben
işlev bildirimleri üzerine niteliğini belirterek olmalıdır?
void maybe_used_function() [[maybe_unused]];
veya fonksiyon tanımları?
void maybe_used_function() [[maybe_unused]] {
/* impl */
}
Ya bir? Her ikisi de?
Etki, standartlaştırılmış ve derleyiciye özgü özniteliklerde aynı olacak mı?
Yerleşim davranışı ve genel uygulamanın ne olduğu konusunda net bir belge bulamıyorum.
Bir tanım, GCC işlev gövdesinden önce niteliği yerleştirmek ve çınlama bir hata verdiği zaman:
void function();
int main(){}
void function() __attribute__((unused)) {}
uyarı: GCC izin vermez bu pozisyonda üzerinde 'kullanılmayan' nitelik bir fonksiyon tanımlama [-Wgcc-compat] void fonksiyonu() __attribute __ {() (kullanılmayan)
Ancak nitelik hatasız iki başka yerlerde yerleştirilebilir:
__attribute__((unused)) void __attribute__((unused)) function() {}
Belki bu yollardan biri ben fonksiyon tanımlarında özellik kullanmak için bekliyorunuz nasıl? N4606 kaynaktan
Siz * deneyin ve derleyicinin gerçekte ne dediğini gördünüz mü? AFAIK, öznitelikler yalnızca * bildirimlerine dayanıyor, ancak standart metni iki kere kontrol etmedim. –
@JesperJuhl: Bu durumda derleyici yanlıştır ve bu özellikle, özellikle (ya da hiç) doğru şekilde uygulanabilen ya da uygulanamayan _upcoming_ dil özellikleri tartışılırken olağandışı olmaktan uzaktır. – ildjarn
@ llljarn GCC hatası, '__attribute __ ((kullanılmamış))' 'değil [[belki_unused]]' dan geliyordu. Clang aynı şeyi yapıyor gibi görünüyor. –