Autor Thema: Compilerfehler bei C-Bitfeldern  (Gelesen 3773 mal)

tiger717

  • Beiträge: 84
    • Profil anzeigen
Gespeichert
« am: 24. September 2012, 21:53 »
Hallo,

beim Programmieren (ähm, vielmehr übertragen) der x64-Paging-Strukturen in meine Bitfelder bekomme ich leider ständig einen mir nicht ersichtlichen Fehler. (Wahrscheinlich total trivial und dumm, aber wie auch immer. Vier Augen sehen mehr als zwei!  :-D )

Code (gekürzt, das ganze gibts natürlich für jede Struktur, und Entschuldigung für die grauenhafte Formatierung, irgendwie funktionieren Tabs im Editor nicht):

typedef struct tag_pml4
{
uint64_t PML4_PRESENT : 1; // Zeile 60
uint64_t PML4_WRITE : 1;
uint64_t PML4_USER : 1;
uint64_t PML4_WRITETHRU : 1;
uint64_t PML4_NOCACHE : 1;
uint64_t PML4_DIRTY : 1; // Zeile 65
uint64_t : 3;
uint64_t PML4_3FREE : 3;
uint64_t PML4_PHYSADDR :40;
uint64_t PML4_11FREE :11; // Zeile 69
uint64_t PML4_NXE : 1; // 0 = EXE/ALLOWED 1 = EXE/FORBIDDEN
} pml4;

Output:

In file included from vmm.c:2:0:
paging.h:61:11: Fehler: expected identifier or »(« before numeric constant
paging.h:62:11: Fehler: expected identifier or »(« before numeric constant
paging.h:63:11: Fehler: expected identifier or »(« before numeric constant
paging.h:64:11: Fehler: expected identifier or »(« before numeric constant
paging.h:65:11: Fehler: expected identifier or »(« before numeric constant
paging.h:70:11: Fehler: expected identifier or »(« before numeric constant
paging.h:71:1: Warnung: kein Semikolon am Ende von »struct« oder »union« [standardmäßig aktiviert]

Kompiliert auf Ubuntu 12.04 LTS, gcc-Version 4.6.3 (Ubuntu/Linaro 4.6.3-1ubuntu5) mit folgenden Flags:

-Wall -Wextra -Wshadow -Wconversion -Wunreachable-code -Werror-implicit-function-declaration -Wuninitialized -nostdlib -nostartfiles -nodefaultlibs -ffreestanding -fno-builtin -m32 -g3 -O0 -c


Besonders die Warnung am Ende ist komisch - da ist doch ein Semikolon?!

Vielen Dank für eure Hilfe und sorry für meine Dummheit...

Jidder

  • Administrator
  • Beiträge: 1 625
    • Profil anzeigen
Gespeichert
« Antwort #1 am: 24. September 2012, 22:39 »
Die einzige Erklärung, die ich hätte, ist, dass du irgendwo #define PML4_PRESENT 1 usw. stehen hast. Es ist nämlich ungewöhnlich, dass Felder komplett in Großbuchstaben stehen.
Dieser Text wird unter jedem Beitrag angezeigt.

tiger717

  • Beiträge: 84
    • Profil anzeigen
Gespeichert
« Antwort #2 am: 24. September 2012, 22:51 »
Die einzige Erklärung, die ich hätte, ist, dass du irgendwo #define PML4_PRESENT 1 usw. stehen hast. Es ist nämlich ungewöhnlich, dass Felder komplett in Großbuchstaben stehen.

Danke, du hast mich auf die Lösung gebracht - ich sollte nicht immer mitten in der Nacht Code schreiben und dann den armen Compiler beschuldigen... :-)

 

Einloggen