MenüHomeBlogMagic

C/C++ size of array

Des öfteren habe ich den Fall dass ich Arrays im source file definiere, deren Länge erst zum kompilierzeitpunkt feststehen.
Das liegt zum Teil daran dass zusätzliche Elemente hinzukommen wenn z.B. DEBUG gesetzt ist.

Um die Größe des Arrays ohne komplizierte Makros in einer Variable speichern zu können, kann mit sizeof gearbeitet werden. Das hat den Vorteil, dass die Arbeit an den Compiler abgegeben wird.

Ein Beispiel dass ich eben hatte:

typedef struct
{
public:
  uint8 uiPort;
  uint8 uiPin;
} SPortPin;

SPortPin aPortPins[] = {
#if defined(LINUX) || defined(WINDOWS)
    {0, 1},
    {0, 2}
#elif defined(GENERIC)
    {2, 6},
    {2, 7},
    {2, 8},
    {2, 9}
#else
#endif
};
const size_t uiPortPinDevices = sizeof(aPortPins) / sizeof(aPortPins[0]);

In diesem Beispiel sieht man wie die das Array aPortPins erst beim Kompilieren zusammengestellt wird, und so auch die Größe nicht sofort erkennbar ist.
Durch die sizeof Kombination bei der Variable uiPortPinDevices wir die Größe vom Kompilier festgelegt und kann sogar in eine const Variable übernommen werden.

Das ganze habe ich in meinem Framework als Makro definiert:

#define CCSIZEOFARRAY(ARRAY) sizeof(ARRAY) / sizeof(ARRAY[0])
Permalink: https://adirmeier.de/Blog/ID_279
Tags: Blog, C/C++, Code, Makrovon am 2019-10-03