İnşaat & Yapısal Mühendislik
Yazma için en iyi uygulamalar Portre C Kodu Farklı Platformlar
Table of Contents
Mobil C kodu yazmak profesyonel yazılım mühendisliğinin temel taşıdır, gerçek portability ile çeşitli donanım mimarisine sahip uygulamalar yürütmeye olanak sağlar ve minimum rework ile derleyiciler. Portability bakım yükünü azaltır, kullanıcı tabanını genişletir ve gelecekteki koruyucular kodu gelişmekte olan platformlarda korur.Bu makale, gerçek portability elde etmek için en iyi uygulamaları test eder, C standardında zemine ve on yıllardır gerçek dünya deneyimine sahip olur.
Platform Farklılıkları Anlamak
Portability tekniklerini uygulamadan önce, geliştiriciler platformlar arasında var olan tür varyasyonları tanımalıdır. Bu farklılıklar dört geniş kategoriye yayılmıştır: derleyici davranışlar, işletim sistemi APIs, donanım mimarisi ve kaynak kısıtlamaları.
Compiler Variations
C derleyici - GCC, Clang ve MSVC'den IAR ve Keil gibi araçları barındırmak için - C standardını farklı uygunluk seviyelerinde uygulamakla mümkündür.Onlar ayrıca imzalanabilir, biraz tarla düzeni, yapı ⁇ ve kesin semantics of IFLT:2). Dil uzantıları (örneğin, GNU C uzantıları, Microsoft'un) de gizli bağımlılıklar yaratabilir.
İşletim Sistemi Farklılıkları
POSIX benzeri sistemler (Linux, MacOS, BSD) birçok API'leri paylaşıyor, ancak Windows temel olarak farklı bir sistem çağrılarını ortaya koyar. File I/O, threading, dinamik bağlantı, sinyal ve süreç kontrolü genellikle şartlı bir derleme veya soyutlama katmanı gerektirir.
Donanım Mimarisi ve Endianness
Süreçtörler kelime büyüklüğüne göre farklıdır (32-bit vs. 64-bit), sipariş (büyük-endian veya küçük-endian), ayar gereksinimleri ve talimat seti özellikleri.BilgecexDddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddx'a göre, ssssss.
Kaynak Ekleri
Gömülü sistemler veya derinden gömülü hedefler bir işletim sistemi eksikliği olabilir, sınırlı yığın / kullanım boyutları vardır ve kısıtlayıcılar ile uygulamalar sağlar. Portre kodu hafıza kullanılabilirliği ve runtime desteği hakkında varsayımlardan kaçınmalıdır.
Portre C Code için en iyi uygulama
Standart C Kütüphaneleri Üzerine Yeniden Yeniden
C standart kütüphane (ISO/IEC 9899), derleyicinin tedarik etmesi gereken temel bir özelliktir.) Matematik işlemleri için, [[Ücretsiz hesaplarda bulunanlar için, [[Üye Olmayanlar İçin Tıklayınız.
Sabit Tipleri Kullanın
[FONT: 16) Başlık, [[Döneticiler, [[GÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜ
#include <stdint.h>
#include <inttypes.h>
int32_t val = -100;
printf("Value: %" PRId32 "\n", val);
Temel Türlerin Temel Özellikleri Hakkında Tahminlerden Kaçınmak
Asla 32 bit olduğunu varsaymayın, [[DövdÜyeler, 64 bit veya bu nedenle, 16.000 $ 'lık bir şekilde imzalanırsınız.Onlara tamsa olarak depolanırsanız.
Endianness Explicitly
Makineler üzerinde ikili verileri (network, dosya veya paylaşılan hafıza) her zaman sipariş ile bilinen bir düzene dönüştürülür (büyük-endian) POSIX işlevleri [[Şamp.)
Özet Dosya Sistemi Operasyonları
Dosya yolu kasıtlı olarak farklıdır ([[DÜDÜDÜDÜŞÜNÜCÜDÜŞÜNÜCÜDÜŞÜNÜCÜDÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜCÜDÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜ BÜTÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜye Uygundur.Üye Olmayanlar İçin Tıklayınız.
Tanımlanmamış ve Uygulamalı Davranışsız Davranış
C standart, tanımlanmamış veya uygulama tanımlanmamış birçok operasyonu tanımlar. Örnekler, tamsayı içerir, bu tür kalıpları yakalamak ve OKT:40'u değerlendirmek için [[Döneticileri kullanın.Use statik analizrs likeUVT:0)Cppcheck).Clang-Tidy).
Compile-Time Selection için Preprocessor Macros
Durumsal derleme platformun özel kodu için gereklidir, ancak kötüye kullanılması her zaman her bir tanımlı makroları kullanabilir: 03.03.2012, [[Üye ait olan, [[Üye Olmayanlar, [[Üye Olmayanlar, ARAPÇLAR) ve derleyici makrolar her zaman platforma özel bölümlerde küçük bölümlere sahiptir.
#ifdef _WIN32
#include <windows.h>
#define SLEEP(ms) Sleep(ms)
#else
#include <unistd.h>
#define SLEEP(ms) usleep((ms)*1000)
#endif
Sistem Çağrıları için Özet Katmanları kullanın
Örneğin, takmak için, soketler, zamanlayıcılar ve hafıza yönetimi, ince sarmalayıcılar oluşturmak. Örneğin, aurFLT:48) türü ve [[Döneticileri (örneğin, SMT ve DAVRANI) Windows üzerinde haritaları POSIX threadlere ve [[DÜyetim|DÜye Olmayanlar için aynı yaklaşım çalışır.
Multi Platformlar Erken ve Sık sık test
Sürekli entegrasyon (CI) boru hatları Linux, Mac, Windows ve herhangi bir gömülü hedef üzerinde test paketini derlemeli ve çalıştırmalıdır.Çalışanlar ve emülatörler (örneğin QEMU) dağıtımdan önce mimariye özgü böcekleri yakalamaya yardımcı olur.Otomatik testler.ctest).
Gelişmiş Portability Teknikleri
CMake veya Autotools ile Sistem Yapılandırması
Modern inşa sistemleri, platform özelliklerini yapılandırabilir. CMake'sETHFLT:53), [[FONTD:54) ve [[FONTFLT:55) modüller kodunuzun dahil edebileceği bir şekilde oluşturur.Bu, gerçek bir nokta ile birlikte zincirler.
// Generated config.h
#define HAVE_STDINT_H 1
#define WORDS_BIGENDIAN 0
#define SIZEOF_LONG 8
Portre Inline Assembly and Intrinsics
Performans platformuna özel talimatlar talep ettiğinde (örneğin, SIMD, CPUID), enkaplar onları ayrı dosyalarda ayırıp aynı mimaride derleyicileri kullanarak doğru dosyayı seçerler.Use derr intrinsics (likeDAN /ICC/VS) yerine, inline assemblysics'ten daha taşınabilir.
Align Data Structures Explicitly
Yapı paketleme ve hizalama değişir.GCC için 660. ([Dönetici:62) C11 ()) daha eski derleyiciler için, önceden işleme veya tabanlı iş aralıkları ( for GCC,FLT:64).
Signal processing Compatability
Signal süreklileri ([[D:65) ve güvenli sinyal işleme farklı yaygın olarak farklı. POSIXİLD:67) API, eski ) ile uyumludur.In Windows, sinyalleri konsol kontrolü eller üzerinden emilir.
Gerçek Dünya Pitfalls ve Them'dan Nasıl Kaçırmak
Bir Sonbahar Olmadan Yeniden Tanımlayın:69.
[03.03.000] POSIX'te standarttır, ancak birçok gömülü platformda ve eski Windows ortamları eksiktir.(0)plibc) veya izinsiz bir lisansa dahil olmak üzere taşınabilir bir uygulama kullanın.
AceptFLT:72) Bir İşaretli Integer
C standardı sadece şöyle diyor: “73.) zamanlarını temsil edebilecek gerçek bir türdür. Bazı gömülü sistemlerde, 32 bit değerinde bir imzalanmamıştır; diğerleri 64-bit imzalı tamsayı asla gerçekleştirmez.
Sistem Çağrılarında Thread-Safety Neglecting Thread-Safety in System Calls
İşlevler:76)), [[FONT:77| ve [[FONTD:78) statik tamponları kullanıyor ve reentrant varyantlarını kullanın ()., [[Dönetici:80) mümkün olan platformlarda geri çekilme uygulamaları sağlar ve onları eksik olan platformlarda geri döndürür.
Sonuç Sonuç Sonuç Sonuç Sonuç Sonuç Sonuç Sonuç
Mobil C kodu yazmak hem bir disiplin hem de bir yatırımdır. C standardına yakından bağlı olarak sabit geniş tipler, soyutlama sistemi arayüzleri seçmek ve birden fazla platformda test etmek, geliştiriciler süper bilgisayarlardan mikro kontrollere kadar uzanan ortamlarda güvenilir bir şekilde çalışan yazılım üretebilirler.