Proč tolik knihoven, definovat jejich vlastní pevná šířka celá čísla?

0

Otázka

Nejméně od C++11 jsme dostali krásné pevnou šířku celá čísla, pro příklad v C++'s <cstdint> nebo v C je <stdint.h> po vybalení z krabice, (např. std::uint32_t, std::int8_t), takže s nebo bez std:: před nimi, a dokonce i makra pro minimální šířky (INT16_C, UINT32_C a tak dále).

Ještě máme udělat dohodu s knihovnami každý den, které definují jejich vlastní pevná šířka celá čísla, a jste mohli vidět například sf::Int32, quint32, boost::uint32_t, Ogre::uint32, ImS32,, Můžu jít dál a dál, pokud chcete, abych. Víš, pár více pravděpodobně.

Někdy se tyto typedefs (často také definice maker) může vést ke konfliktům například, když chcete předat std pevná šířka celé číslo funkce z knihovny očekával pevnou šířku celé číslo s přesně stejnou šířku, ale definována jinak.

Bod s pevnou šířkou celých čísel je je mít pevnou velikost, což je to, co potřebujeme v mnoha situacích, jak víte. Tak proč by všechny tyto knihovny jít o a typedef přesně stejná čísla už máme v C++ standard? Ty navíc definuje, jsou někdy matoucí, redundantní a mohou napadnout své codebase, které jsou velmi špatné věci. A pokud nemají šířku a signedness slibují, že alespoň hřích proti principu nejmenšího překvapení, takže to, co je na jejich místě bych se tímto zeptat?

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

Nejlepší odpověď

5

Proč tolik knihoven, definovat jejich vlastní pevná šířka celá čísla?

Pravděpodobně pro některé z níže uvedených důvodů:

  • začali před C++11 nebo C11 (příklady: GTK, Qt, knihovny interní GCC, Boost, FLTK, GTKmm, Jsoncpp, Eigen, Dlib, OpenCV, Wt)

  • chtějí mít čitelný kód, v rámci své vlastní namespace nebo class (mají své vlastní obor názvů, jako je Qt, může zlepšit čitelnost dobře napsaný kód).

  • jsou build-time konfigurovatelné (např. s GNU autoconf).

  • chtějí být kompilační dojde k chybě s staré C++ kompilátory (např. některé C++03)

  • chtějí být cross-kompilační dojde k chybě levné vložené mikroprocesory , jehož kompilátor není kompletní C++11 kompilátor.

  • mohou mít generický kód (nebo template-s, např. v Eigen nebo Dlib) možná podporu libovolné přesnosti aritmetiky (nebo bignums) možná pomocí GMPlib.

  • chtějí být nějak prokazatelné s Frama-C nebo DO-178C certified (pro vložené kritických softwarových systémů)

  • jsou specifické pro procesor (např. asmjit , který generuje strojový kód v běhu na několik architektur)

  • možná rozhraní pro konkrétní hardware nebo programovací jazyky (Tensorflow, OpenCL, Cuda).

  • chtějí být použitelné od Python nebo GNU guile.

  • mohly by být pro jednotlivé operační systémy.

  • oni přidat nějaké dodatečné runtime kontroly, např. proti dělení 0 (nebo jiné nedefinované chování) nebo přetečení (C++ standard nemůže vyžadovat, pro výkon, nebo historických důvodů)

  • mají být snadno použitelné stroj-generované C++ kódu (např. RefPerSys, ANTLR, ...)

  • jsou navrženy tak, aby být vypovězeny z kódu C (např. libgccjit).

  • atd... Najít další dobré důvody, proč je ponechán jako cvičení pro čtenáře.

2021-11-24 08:35:11

Dobře, vyhrál jsi. Budu zastavit válcování oči pokaždé, když vidím jeden.
nada

Mám toho tolik, kód odpovídající první odrážka není to vtipné.
user4581301

V jiných jazycích

Tato stránka je v jiných jazycích

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