Prečo tak mnoho knižníc definovať svoje vlastné pevná šírka celé čísla?

0

Otázka

Minimálne od C++11 dostali sme krásne pevná šírka čísla, napríklad v C++'s <cstdint> alebo v C je <stdint.h> z krabice, (napríklad std::uint32_t, std::int8_t), tak s alebo bez std:: pred nimi, a dokonca aj ako makrá pre minimálne šírky (INT16_C, UINT32_C a tak ďalej).

Ešte máme urobiť dohodu s knižnicami každý deň, ktoré definujú svoje vlastné pevná šírka celé čísla a ste mohli vidieť napríklad sf::Int32, quint32, boost::uint32_t, Ogre::uint32, ImS32, ... Môžem ísť na a zapnuté, ak chcete, mi. Aj vy vedieť pár viac pravdepodobne.

Niekedy sa tieto definície typedef (často aj makro definície) môže viesť ku konfliktom napríklad, ak chcete prejsť std pevná šírka integer funkcia z knižnice očakával pevná šírka celé číslo s presne rovnakú šírku, ale je definované inak.

Bod pevná šírka celé je ich majú fixnú veľkosť, čo je to, čo potrebujeme v mnohých situáciách, ako viete. Tak prečo by všetky tieto knižnice ísť o a typedef presne rovnaké čísla,, a už máme v C++ štandardom? Tie extra definuje sú niekedy mätúce, zbytočné a môžu napadnúť vaše codebase, ktoré sú veľmi zlé veci. A ak nebudú mať šírku a signedness sľubujú mať, sa aspoň hriech proti zásade najmenej údiv, takže to, čo je ich bod som týmto požiadať, aby ste?

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

Najlepšiu odpoveď

5

Prečo tak mnoho knižníc definovať svoje vlastné pevná šírka celé čísla?

Pravdepodobne pre niektoré z dôvodov, uvedených nižšie:

  • začali pred C++11 alebo C11 (príklady: GTK, Qt, knižnice interné GCC, Boost, FLTK, Libcwidget, Jsoncpp, Eigen, Dlib, OpenCV, Wt)

  • chcú mať čitateľný kód, v rámci svojich vlastných namespace alebo class (má vlastný menný priestor, ako Qt robí, môže zlepšiť čitateľnosť dobre napísaný kód).

  • sú stavať-čas konfigurovateľné (napr. s GNU autoconf).

  • chcú byť compilable so starými C++ prekladačov (napr. niektoré C++03 jeden)

  • chcú byť cross-compilable na lacné vložené mikroprocesory , ktorých kompilátor nie je plný C++11 kompilátor.

  • môžu mať všeobecný kód (alebo template-s, napr. v Eigen alebo Dlib) na podporu možno svojvoľné-presné aritmetické (alebo bignums) možno používať GMPlib.

  • chcú byť nejako preukázateľný s Frama-C alebo ROBIŤ-178C certifikované (pre vložené kritické softvérové systémy)

  • sú špecifické pre procesor (napr. asmjit , ktoré generuje stroj kód v behu na niekoľko architektúry)

  • môžu rozhranie pre konkrétny hardvér, alebo programovacie jazyky (Tensorflow, OpenCL, Cuda).

  • chcú byť použiteľné od Python alebo GNU ľsti.

  • mohli by byť operačný systém špecifické.

  • pridávajú niektoré ďalšie runtime kontroly, napr. proti rozdelenie 0 (alebo iné neurčená správanie) alebo pretečenie (že C++ štandardom nemôže vyžadovať, pre výkon alebo historických dôvodov)

  • sú určené na ľahko použiteľné od strojovo generované C++ kód (napr. RefPerSys, ANTLR, ...)

  • sú navrhnuté tak, aby sa disponibilná z C kódu (napr. libgccjit).

  • atď... Hľadaní ďalších dobrých dôvodov je ponechaný ako cvičenie pre čitateľa.

2021-11-24 08:35:11

V poriadku, môžete vyhrať. Budem stop koľajových moje oči zakaždým, keď vidím jeden.
nada

Mám toľko kód zodpovedajúce prvá guľka bod, to nie je vtipné.
user4581301

V iných jazykoch

Táto stránka je v iných jazykoch

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