Forum: Compiler & IDEs 2 Fragen zu C


von Ulrich Schneider (Gast)


Lesenswert?

Hallo,

ich hätte mal zwei Fragen zu C...

1. Bitfelder:
Wenn ich mit struct {} ein Bitfeld anlege, und dabei z.B. ein Feld mit
drei Bit Breite definiere - kann ich dann sicher sein, dass Operationen
die den Wert dieses Feldes verändern kein anderes Feld verändern? Wenn
ich also beispielsweise versuchen würde den Wert 15 an das 3-Bit-Feld
zuzuweisen, oder das 3-Bit-Feld bereits den maximalen Wert 7 hätte und
ich würde es inkrementieren - kann ich dann davon ausgehen dass die
obersten Bits des neuen Wertes automatisch abgeschnitten werden und sie
nicht stattdessen den Wert eines benachbarten Feldes verändern?

2. #define in .c bzw. .h Dateien:
Wenn ich Programmcode in Module aufteile - z.B. für UART-Zugriff uart.c
und uart.h, und ich dann im Hauptprogramm uart.h include: Gehe ich Recht
in der Annahme, dass Konstanten etc. die ich der uart.c-Datei per
#define definiere nur innerhalb dieser Datei gültig sind, während
#defines die in der uart.h definiert werden durch das includen von
uart.h im Hauptprogramm auch dort gültig sind (und daher z.B. zu
Problemen führen könnten, falls dort bereits eine Konstante/ein Makro
etc. mit gleichem Namen existiert)?

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

> kann ich dann sicher sein, dass Operationen
> die den Wert dieses Feldes verändern kein anderes Feld verändern?

Ja.

Zu 2.) Ja, das hast du korrekt verstanden.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.