[C] Größe einer Struktur checken

Gast #2044090
Lesenswert?
• ▲
▼
Hi.

Ich hoffe, dass ich das jetzt hier ins richtige Forum gesetzt habe.

Eigentlich habe ich eine einfache Frage, jedoch stellt sich das als 
großes Problem dar.
Ich will die beim Kompilieren die Größe einer Struktur checken, sodass 
sie eine bestimmte Größe nicht überschreitet. Tut sie es, so soll eine 
Warnung geworfen werden. Wie gesagt, eigentlich nichts dickes ... aber 
irgendwie klappt das nicht.

Meine Gedanken waren folgende:
1
struct stTest
2
{
3
  uint8_t array[100];
4
};
5
typedef struct stTest tstTest;
6

7
uint32_t  size=  sizeof(tstTest);
8
#if(size > 20)
9
  #error ätsch ... zu groß
10
#endif

Habt ihr einen anderen Ansatz? Über Anregungen wäre ich dankbar.

Gruß Stefan
Gast #2044121
Lesenswert?
• ▲
▼
Praktisch ist das fast immer richtig, aber aufpassen! Seit C99 kann 
sizeof nicht mehr alles zur Compilezeit machen.

Diese einfachen Dinge, die seit Jahrzehnten gehen, laufen natürlich 
weiterhin in jeder relevanten Implementierung zur Compilezeit.
#2044389
Lesenswert?
• ▲
▼
Stefan schrieb:
> Hi.
>
> Ich hoffe, dass ich das jetzt hier ins richtige Forum gesetzt habe.
>
> Eigentlich habe ich eine einfache Frage, jedoch stellt sich das als
> großes Problem dar.
> Ich will die beim Kompilieren die Größe einer Struktur checken, sodass
> sie eine bestimmte Größe nicht überschreitet. Tut sie es, so soll eine
> Warnung geworfen werden. Wie gesagt, eigentlich nichts dickes ... aber
> irgendwie klappt das nicht.
> Habt ihr einen anderen Ansatz? Über Anregungen wäre ich dankbar.
>
> Gruß Stefan

Welcher Compiler?
C++0x kennt für solche Zwecke static_assert
http://msdn.microsoft.com/en-us/library/dd293588.aspx
Gast #2044662
Lesenswert?
• ▲
▼
Zur Not kann man das auch unabhängig vom Compiler mit einem Trick 
machen:
1
#include <stdint.h>
2

3
struct stTest
4
{
5
  uint8_t array[100];
6
};
7
typedef struct stTest tstTest;
8

9
uint8_t array_ist_zu_gross[sizeof(tstTest) > 20 ? -1 : 1];
10

11
int main()
12
{
13
}

Bei diesem Programm gibt mir GCC z.B. aus:
1
Stefan.c:9: Fehler: Größe des Feldes »array_ist_zu_gross« ist negativ

Die Meldung mag nicht ganz ideal sein, aber man erkennt den Grund.
Gast #2044705
Lesenswert?
• ▲
▼
danke für eure antworten

@silvan
ganz so einfach ist es bei mir leider nicht. die befüllung der struktur 
übernimmt der anwender. und da ich 256 strukturen zur verfügung stelle, 
wird es scherig die defines der größen für alle zu pflegen.

@arc net
IAR C/C++ Compiler for AVR 5.40.1

@rolf
das ist echt nen guter trick. der könnte mir wirklich helfen. danke.
Gast #2044965
Lesenswert?
• ▲
▼
@rolf
weil das problem zu allgemein ist. in das µc-forum passte es meiner 
meinung nach syntaktisch nicht. da sollte es doch mehr um uart etc pp 
gehen.

damit ich es das nächste mal besser machen kann:
wo hätte es deiner meinung nach am besten gepasst?

gruß stefan

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.