Neden bu kadar çok kitaplık kendi sabit genişlikli tamsayılarını tanımlıyor?

0

Soru

En azından C++11'den beri, örneğin C++'da güzel sabit genişlikli tamsayılar elde ettik <cstdint> veya C'lerde <stdint.h> kutunun dışında (örneğin std::uint32_t, std::int8_tbir, o ile veya olmadan std:: önlerinde ve hatta minimum genişlikler için makrolar olarak (INT16_C, UINT32_C ve benzeri).

Yine de her gün kendi sabit genişlikli tamsayılarını tanımlayan kütüphanelerle uğraşıyoruz ve örneğin görmüş olabilirsiniz sf::Int32, quint32, boost::uint32_t, Ogre::uint32, ImS32, ... İstersen devam edebilirim. Sen de muhtemelen birkaç tane daha tanıyorsun.

Bazen bu typedef'ler (genellikle makro tanımları da vardır), örneğin bir typedef geçmek istediğinizde çakışmalara neden olabilir. std tam olarak aynı genişliğe sahip, ancak farklı şekilde tanımlanmış sabit genişlikli bir tamsayı bekleyen bir kitaplıktan bir işleve sabit genişlikli tamsayı.

Sabit genişlikli tamsayıların noktası, sabit bir boyuta sahip olmalarıdır, bildiğiniz gibi birçok durumda ihtiyacımız olan şey budur. Öyleyse neden tüm bu kütüphaneler C++ standardında zaten sahip olduğumuz tam olarak aynı tamsayıları yazsın ve yazsın? Bu ekstra tanımlar bazen kafa karıştırıcı, gereksizdir ve kod tabanınızı istila edebilir, ki bu çok kötü şeylerdir. Ve eğer söz verdikleri genişliğe ve imzaya sahip değillerse, en azından en az şaşkınlık ilkesine karşı günah işliyorlar, bu yüzden burada size sormamın amacı nedir?

c++ fixed-width integer
2021-11-23 14:45:24
1

En iyi cevabı

5

Neden bu kadar çok kitaplık kendi sabit genişlikli tamsayılarını tanımlıyor?

Muhtemelen aşağıdaki nedenlerden bazıları için:

  • C++11 veya C11'den önce başladılar (örnekler: GTK, Qt, GCC, Boost, FLTK, GTKmm, Jsoncpp, Eigen, Dlib, OpenCV, Wt'ye dahili kütüphaneler)

  • kendi içlerinde okunabilir bir koda sahip olmak istiyorlar namespace veya class (Qt'nin yaptığı gibi kendi ad alanlarına sahip olmak, iyi yazılmış kodun okunabilirliğini artırabilir).

  • yapı zamanı yapılandırılabilirler (örn. GNU autoconf ile).

  • eski C ++ derleyicileri ile derlenebilir olmak istiyorlar (örneğin, bazı C ++ 03 bir)

  • derleyicisi tam bir C++11 derleyicisi olmayan ucuz gömülü mikrodenetleyicilerle çapraz derlenebilir olmak istiyorlar.

  • genel koda sahip olabilirler (veya template-s, örneğin Eigen veya Dlib'de) belki de keyfi hassas aritmetiği (veya bignumları) belki de GMPlib kullanarak desteklemek için.

  • frama-C veya DO-178C sertifikalı (gömülü kritik yazılım sistemleri için) bir şekilde kanıtlanabilir olmak istiyorlar.

  • işlemciye özgüdürler (örneğin, birkaç mimaride çalışma zamanında makine kodu üreten asmjıt)

  • belirli donanım veya programlama dillerine (Tensorflow, OpenCL, Cuda) arayüz oluşturabilirler.

  • Python veya GNU hilesinden kullanılabilir olmak istiyorlar.

  • işletim sistemine özgü olabilirler.

  • örneğin, 0'a bölünmeye (veya diğer tanımlanmamış davranışlara) veya taşmaya (C ++ standardının performans veya geçmiş nedenlerden dolayı gerektiremeyeceği) karşı bazı ek çalışma zamanı denetimleri eklerler.

  • makine tarafından oluşturulan C++ kodundan (örn .RefPerSys, ANTLR,...)

  • bunlar C kodundan çağrılabilir olacak şekilde tasarlanmıştır (örn.libgccjit).

  • vb... Başka iyi nedenler bulmak okuyucuya bir alıştırma olarak bırakılmıştır.

2021-11-24 08:35:11

Tamam, sen kazan. Her gördüğümde gözlerimi yuvarlamayı bırakacağım.
nada

İlk mermi noktasıyla eşleşen o kadar çok kodum var ki komik değil.
user4581301

Diğer dillerde

Bu sayfa diğer dillerde

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................