Wie kann ich drucken Sie das Ergebnis von sizeof() beim kompilieren in C?

Wie kann ich drucken Sie das Ergebnis von sizeof() beim kompilieren in C?

Für jetzt bin ich mit einer statischen assert (hausgebrauten basierend auf anderen web-Ressourcen) zu vergleichen, der sizeof () - Ergebnis, um verschiedene Konstanten. Das funktioniert zwar... ist es bei weitem nicht elegant oder schnell. Kann ich auch erstellen Sie eine Instanz der variable/struct und suchen Sie in der map-Datei, aber das ist auch weniger elegant und schnell, als ein direkter Aufruf/Befehl/Betreiber. Weiter, dies ist ein embedded-Projekt mit mehreren cross-Compiler,... so bauen und laden Sie ein Beispielprogramm, um das Ziel und dann das Lesen aus einen Wert ein, ist noch mehr Aufwand als die oben genannten.

In meinem Fall (alte GCC) #warning sizeof(MyStruct) eigentlich nicht interpretieren sizeof() vor dem drucken die Warnung.

  • Was ist die motivation?
  • Zu wissen, die Größe einer multi-Tier-Struktur, ohne zu Graben in der map-Datei.
  • Gut, die #Warnung-Anweisung erfolgt durch den Präprozessor vor dem richtigen compiler hat sogar schon begonnen - also ich glaube nicht, dass dies möglich ist. Ich denke, schreiben ein kleines test-Programm, das aufgerufen wird, als benutzerdefinierter Schritt in den build-Prozess ist eine Lösung. Viel Glück.
  • Was meinst du mit "weit ab ... schnell"? Statische assertions getestet werden zur compile-time (und so ist sizeof ausgewertet zur compile-Zeit).
  • Und es gibt nichts wie ein Aufruf zum sizeof. Es ist ein operator, keine Funktion.
  • Ich werde zumindest damit einverstanden, dass ich nie erwartet hätte #Warnung zu funktionieren, wie es ist ein precompiler Befehl, nicht eine compiler-Direktive.
  • aus ... fast" bezieht sich auf das schreiben der Haufen statisch behauptet. Wie MY_STATIC_ASSERT(sizeof(MyStruct) > 100). Wenn ich eine Suche verändern 100 bis 200, dann 300, dann 250, dann 275, dann... ist es weit von einem schnellen Prozess. Auch habe ich den Verweis entfernt, um ein sizeof() Aufruf.
  • benötigen Sie die genaue Größe oder nur eine grobe Figur ?
  • Wenn Sie ein C++ - compiler für Ihr Ziel, das Sie vielleicht überprüfen Sie es mit stackoverflow.com/questions/2008398/...
  • Geretz genau, in einigen Fällen aber ballpark ausreichend gewesen wäre heute.
  • Ich könnte wahrscheinlich etwas hinzufügen, um unsere standard-Makefile zu erleichtern, die Verwendung der C++ - Ansatz. Ich bis Ende Mai gehen, die route, wenn Filipe ist richtig, dass das, was ich will, ist nicht möglich.
  • Ein anderer Ansatz, wenn Sie erstellen können elf-Dateien mit debug-Informationen in Ihnen ist die Verwendung der pahole tool auf die endgültige ausführbare Datei oder Objekt-Dateien. (Oder auch mit objdump --Zwerg)
  • könnten Sie diese Fahrt ein klein wenig mithilfe von einem Haufen von #if - #else MY_STATIC_ASSERTS um einen Anhaltspunkt für die Warnung.
  • Ich hatte versucht objdump --dwarf auf einer kleinen Struktur, und es schien, als ungenau. Ich sollte überdenken, um zu sehen, was ich falsch gemacht habe.
  • Die statische assert Werke von typedef'ing ein array-Typ mit einer positiven (assert übergeben) oder negativ (assert failed) Größe. Dieser tut nichts in Bezug auf den Präprozessor so #if funktioniert nicht mit ihm. Dieser sagte, was ich Tat, war ein Haufen behauptet Betriebssystem auf einem #define dass ich zeigen konnte, um die struct von Interesse.

InformationsquelleAutor altendky | 2014-01-07
Schreibe einen Kommentar