Diskussion:Plattformunabhängige Programmierung in C

Aus der Mikrocontroller.net Artikelsammlung, mit Beiträgen verschiedener Autoren (siehe Versionsgeschichte)
Wechseln zu: Navigation, Suche

Was noch fehlt

Bei einem Wettbewerbsartikel würde ich zumindest noch folgende Punkte erwarten:

  • Verweise auf die entsprechende Kausel im Standard, so dass jeder Interessierte es genau nachlesen kann.
  • Bessere Recherche: char ist nicht notwendig signed, sondern kann auch unsigned sein. Dies überlässt der C-Standard der Implementierung (ABI etc.)
  • long long wird erst mit C99 eingeführt
  • Ebenso stdint.h das zB uint8_t definiert — und im Artikel noch nichtmal erwähnt wird. Ditto für inttypes.h.
  • signed und unsigned-Typen unterscheiden sich auch hinsichtlich des Überlaufverhaltens.
  • −2n−1 als minimaler Wert für eine n-Bit signed-Variable wird vom Standard nicht zugesichert. Ausnahmen sind zwar exotisch, sollten aber Erwähnung finden.
  • Maximal- und Minimalwert erhält man z.B. per INT_MAX oder INT8_MIN.
  • Wie sieht's mit portierbarer Ausgabe aus, etwa mit printf et al.?
  • Was ist bei der Portierung von Arithmetik zu beachten? Was kann stdint.h leisten und was nicht? (Die Promotion-Rules werden z.B. nicht verändert).
  • Was ist bei portabler Zeiger-Arithmetik zu beachten? Was ist mit sizeof (void*), size_t und ptrdiff_t etc.?
  • Wie ist mit Literalen umzugehen, etwa in x = 1 << y? Welche Möglichkeiten gibt es? Was ist der Unterschied zwischen UINT32_C und einem Cast?
  • Wie sieht es mit Berechnungen im Präprozessor aus, etwa #if X != 1 << 16. Ist das portierbar? Welchen natürlichen Typ haben die Präprozessor-Literale?
  • Was ist beim Serialisieren / Deserialisieren zu beachten? Bit-, Byte- und Word-Endianess.
  • Wie ist mit unterschiedlichen Alignments umzugehen. Wieder fällt einem Serialisieren / Deserialisieren und Zeiger-Arithmetik ein.
  • Bei Portierbarkeit kann auch das Thema "Bitfelder" nicht ausgespart werden, ebenso verdienen andere Datentypen wie float zumindest Erwähnung.
  • Was tun, wenn kein C99 verfügbar ist, wie bei Microsoft-Compilern nicht unüblich?
  • Was ist Für und Wider? Entwicklungszeit, Fehleranfälligkeit, Effizienz des erzeugten Codes, Leserlichkeit des Codes, etc.
  • Welche Teile eines Programmes können als nicht-portierbar angesehen werden? (ISRs, Ausgabe (LCD, UART), ...), wie ist damit umzugehen, und wie sieht die Integration in den portierbaren Teil aus? Etwa in ein minimales Programm wie folgt, und zwar /ohne/ diese Quelle umzuschreiben und UART- oder LCD-Funktionen rein zu hacken?
          #include <stdio.h>
          #include <stdlib.h>

          int main (void)
          {
             printf ("Hallo Welt!\n");
                
             return EXIT_SUCCESS; 
          }