Ben iPhone, Windows, Linux, Mac ve Symbian S60 dahil epeyce farklı platformlarda, üzerine inşa edebilmek için gereken C++ küçük bir kütüphane yazıyorum. Kodun çoğunu platform-agnostik olacak şekilde yazdım, ancak platform bazında yazılması gereken bazı bölümler var. Platformu C Preprocessor Tanımlar
Şu anda geçerli platformda bağlı olarak farklı bir başlık dahil ederek bunu gerçekleştirmek ama tanımlamalar tüm platformlar için tanımlanan hangi önişlemci emin değilim çünkü bu ortaya koymasıyla sorun yaşıyorum. Pencereler için genellikle WIN32 veya _WIN32'yi görmeye güvenebilirim. Linux için _UNIX_'ı görmeye güvenebilirim ancak diğer platformlar ya da 64-bit varyantları hakkında daha az eminim. Herkesin platformlarda bulunan farklı tanımların bir listesi var mı yoksa bir config dosyasına mı yoksa gcc parametresine başvurmalı mıyım? belirli bir C ya da C++ uygulamaları insafına olacak, böylececevap
benim imleri this sourceforge pre-compiler sayfa var.
Cı, ne de C++ standartlar ne, bu semboller tanımlar. Yaygın olarak kullanılan sembollerin bir listesi sahip olmak için yararlı bir şey olurdu, ama maalesef bir tane bile yok. Ben platformun evrensel listesi vardır sanmıyorum
gördüğüm her çapraz platform kütüphanesi bir reklam-hoc config.h bu şeylerle dolu olduğu gerçeği bakılırsa tanımlar. Ama burada libpng
tanımları tamamen sizin derleyici satıcı kadar olacak kullandığı biri
zlib vb libpng gibi oldukça taşınabilir kütüphaneler tarafından kullanılan olanlar bakarak düşünebilirsiniz. Tüm platformlarınızda aynı derleyiciyi (diyelim, gcc) kullanıyorsanız, biraz daha kolay bir zamana sahip olacaksınız.
Ayrıca yerine .h dosyalarının en platformu bağımlı değildir, öyle ki projenizi düzenlemeye denemek isteyebilirsiniz. Uygulamanızı (cpp dosyaları) ayrı dosyalara ayırın; Özgün olmayan şeyler için bir tane ve her bir platform için bir tane. Platforma özgü olanlar, yalnızca bu platform için anlamlı olan 'özel' başlıkları içerebilir. Bunun gibi bir şey elde etmek için adaptör fonksiyonlarını yapmak zorunda kalabilirsiniz (sistem lib'leri biraz farklı argümanlar aldığında) ama sonunda bunun gerçekten faydalı olduğunu buldum ve yeni bir platform oluşturmayı çok daha kolay hale getirdim gelecekte.
Eğer GCC varsa bir verilen sistem için varsayılan önişlemci semboller arasında bakmak istiyorsanız (örneğin, Mac OS X, iOS, Linux), böylece komut satırından tam bir listesini alabilirsiniz:
echo 'main(){}' | cpp -dM
Bu önişlemci faaliyet gösterdiği de derleme aşamasında olduğu gibi, sembollerin çoğu sistemi değil de derleyici barındıran tek sistemin işletim sistemini ve CPU tipini tanımlamak, ancak çoğu zaman sınırlı kullanımı vardır hedefleniyor (örneğin iOS için çapraz derleme yaparken). Mac OS X ve iOS hedef alındığı sistemin derleme zamanı karakteristiklerini belirlemek için doğru giderken bu o zaman olabilir şu anda kullanılan Platformu ve SDK TargetConditionals.h pick up ve olacaktır
#include <TargetConditionals.h>
olduğunu Makroların bazılarındaki (örneğin) endianness ve diğer bazı özellikleri belirler. (Ne tür bir bilgi toplayabileceğinizi görmek için TargetConditionals.h'ye bakın.)
-dM çıktısının kontrol edilmesine yardımcı olabilse de, önceden sourceforge wiki sayfası kadar fazla bilgi garanti edemez. – rubenvb
- 1. Preprocessor makro nasıl oluşturulur?
- 2. C# preprocessor yönergesini merkezi bir dosyadan ayarlayabilir miyim?
- 3. Web Platformu Yükleyicisi
- 4. Varsayılan msbuild platformu nedir
- 5. Platformu Dize iPad Pro
- 6. Geçerli platformu SauceLabs
- 7. () Preprocessor makrolar içinde if-else if zincir
- 8. Lexical veya Preprocessor Issue React Yerel
- 9. Otomatik # tanımlar Visual Studio 2010
- 10. GCC ne zaman NDEBUG tanımlar?
- 11. Google Bulut Platformu - Veri Dağıtım
- 12. Django Kitap platformu var mı?
- 13. İyonik yapı platformu geçersiz kılma
- 14. Windows üstbilgileri nasıl uyuşur (yararlı tanımlar)?
- 15. . Net platformu için bir DSL yazma
- 16. Windows Unicode olmayan uygulamaları nasıl tanımlar?
- 17. İlanı C Sabitler/Makrolar
- 18. Visual Studio 2012 platformu araç grubu v110_xp
- 19. Düzeltme işlemi için yararlı olan argümantasyonu (değerlendirmeden önce), stringification C preprocessor makrosu #
- 20. QMake platformu kapsamı en az 3 platformu kapsamı değerleri vardır belirtiyor Nokia'nın QMake belgelerine On
- 21. , kendi BASE_PATH ve set_include_path öğemi tanımlar mı?
- 22. javascript, kapsamı komut dosyası etiketleriyle tanımlar?
- 23. Rails 3 ile kendi sunucusunu nasıl tanımlar
- 24. pandalar 0.18.0 vs pandaları tanımlar 0.17.0
- 25. Python'da kayan nokta kesinliğini ne tanımlar?
- 26. BeanShell (jmeter) içindeki bir listeyi tanımlar
- 27. eTicaret: Hybris platformu altında ürün yapılandırıcı
- 28. Dağıtılmış bir web uygulama platformu nasıl oluşturulur?
- 29. Bu gem sadece JRuby platformu nasıl belirtilir?
- 30. Bir özellik paragrafın veya tablonun kenar boşluğunu tanımlar?
Google'ın her zaman eski sürüme işaret etmesine rağmen, yeni wiki-sürümü sürümüne işaret etmek için bağlantıyı düzenledim. . – rubenvb
Tamam, teşekkürler. –