2015-04-17 20 views
6

#include'un externC bloğunun içine yerleştirildiği tüm yerleri bulmaya çalışıyorum. Bunu ön işlemciyi kullanarak kontrol etmek mümkün mü? Benim başlık dosyalarının böyle bir şey eklerim istiyorum:Bu extern "C" nin nasıl algılandığı

#ifdef EXTERN_C_IS_IN_EFFECT 
#error File included from extern "C" block! 
#endif 

Ben de böyle bir durumda, örneğin içinde derleme başarısız için başka yollar arıyorum bazı özel öznitelikleri kullanın. Gcc 4.4.7 kullanıyorum.

Ben extern C blok dahil karşı koruma gereken her başlığında kullanmak sonra makro aşağıdaki ve tanımlanmış: Herhangi sözdizimsel analiz yapılmadan önce önişlemci çalıştığı için mümkün değildir

#define ASSERT_NO_EXTERN_C void assert_no_extern_c(int); void assert_no_extern_c(double); 
+7

'extern', önişlemci tarafından fark edilmez. –

+1

Eğer bir extern "C" bloğu olan tüm dosyaları bulmak için buna ihtiyacınız varsa, kod projenizi favori IDE'ye aranacak tüm dosyalara götürebilir ve "Tüm Projede/Çözümde Arayın ..." – Incubbus

+0

@ πάνταῥεῖ Hm. #define extern statik '? –

cevap

11

Aynı adla ve farklı parametrelerle 2 işlev prototipi tanımlayabilirsiniz. Extern "C" bloğu durumunda uyarı alacaksınız. Ve C++ 'da izin verilir.

+0

Teşekkürler! Bu benim için çalışır: void assert_no_extern_c (int); void assert_no_extern_c (çift); –

6

; yani, önişlemci, extern "C"'un ne olduğunu bile bilmez ve bu eylem, bu tür bir yönergelerin varlığına da bağlı olamaz.

Ancak, bağlantı belirtimleri yuva yapar; bu nedenle, includer'in extern "C" belirtmediğinden emin olmak yerine, üstbilginizi C++ bağlantısı kullandığından emin olmak için bir extern "C++" belirtimine yerleştirebilirsiniz.

İlgili konular