Ben ilke olarak bu muhtemelen tanımsız davranış olduğunu biliyoruz, ama büyük bir proje ile uğraşan çıkarına, burada GCC hakkında benim soru: Ben kullanarak, -std=c++11
ile tek transation gcc -std=c++98
ünitesi ve başka derlemek varsayalımFarklı GCC diyalektleri birbirine bağlanabilir mi?
tam aynı derleyici yüklemesi. İki nesne dosyasını bağlayabileceğim ve iyi tanımlanmış bir program alabileceğim herhangi bir garanti var mı?
Bildiğim kadarıyla, potansiyel problemler nedeniyle sadece farklı Makrolara kütüphane başlıkların farklı görünümler gelebilir ve bu da bu en iyi ihtimalle için, yeni üye işlevlerini, ama asla üye nesneleri eklersiniz söyleyebilirim standart kütüphane sınıfları.
Bu, büyük bir projenin farklı bölümlerini farklı dil lehçesi seçenekleri ile derlemek için kabul edilebilir mi?
Güncelleme: Eğer dik bir soru eklemek gerekir: Hangi iki farklı GCC sürümlerini (4.3 ve 4.6 diyelim ki) ancak kullanımı hakkında wht aynı lehçesi seçeneği (-std=c++98
)? in this GCC documentation numaralı liste, kütüphanenin 4.2.2 ve 4.6 arasındaki her iki yönde uyumlu olduğunu akla getiriyor gibi görünüyor.
"tek güçlükle standart kütüphane projenizde kullanılan önişlemci sembolleri ile derlenmiş olan bekleyebilirsiniz" - ve öyle olsa bile, bir an makro için varsayalım:
Ayrıca ilgili bkz 'MYPROG_CONFIG_FILE_LOCATION' memset.c'de kullanılır, daha sonra 'memset.c' ifadesinin anlamı programınızdaki anlamıyla tamamen ilgisizdir. Bu yüzden eğer 'memset.c'' MYPROG_CONFIG_FILE_LOCATION' ile/olmadan 'ikili derleme için bir fark yaratırsa, programınızın' MYPROG_CONFIG_FILE_LOCATION' işlevini de kullanıp kullanmamasından bağımsız olarak bunu yapar. –
@SteveJessop Evet. Olsa bile, size şeffaf olmalı. Pratikte, ad alanınızdaki tüm önişlemci sembolleri (yani, alt çizgi ile başlamıyor ve iki bitişik alt çizgi içermiyor) _should_ emin olun. Uygulama ismindeki önişlemci sembolleri, '_GLIBCXX_DEBUG' gibi olmayacak. –