Forum: Mikrocontroller und Digitale Elektronik compiler gibt keinen Fehler aus, aber warum nicht?


von brechbunkt (Gast)


Lesenswert?

Hallo,

ich schaue mir gerade die Datei "compiler.h" aus dem asf (atmel software 
framework) von Atmel an. Dort bin ich auf diese Zeilen gestoßen:
1
typedef uint32_t                U32;  //!< 32-bit unsigned integer.
2
typedef uint32_t                le32_t;
3
typedef uint32_t                be32_t;

Meine Frage ist nun, was macht es für einen Sinn das "uint32_t" gleich 
drei mal zu definieren? Und vor allem, warum meckert hier der Compiler 
nicht? Nach meinem Verständnis dürfte er doch nun gar nicht wissen ob er 
nun "U32" "le32_t" oder "be32_t" verwenden soll.

von Noname (Gast)


Lesenswert?

Der Compiler interpretiert diese Typdeklarationen anders als Du.

von Peter II (Gast)


Lesenswert?

schau mir mal die doku typedef an, dann sollte es klar sein.

von M. L. (erf)


Lesenswert?

Ist es beim Typedef nicht andersrum? Er ersetzt doch den rechten Term 
durch den linken oder nicht? Also werden alle "U32" "le32_t" oder 
"be32_t" im Code durch "uint_32t" ersetzt. Somit dürfte den Compiler das 
nicht weiter interessieren, denke ich zumindest gerade.

von Dreher (Gast)


Lesenswert?

brechbunkt schrieb:
> Meine Frage ist nun, was macht es für einen Sinn das "uint32_t" gleich
> drei mal zu definieren?

Falsch herum gedacht. Es gibt jetzt drei Aliasse für uint32_t.

von Brüno (Gast)


Lesenswert?

Typische halbislamistische "C"-Kacke.

Scheinheilig von links nach rechts geschrieben, dabei aber subeversiv 
von rechts nach links jeden guten Geschmack verderbend.

;-)

von egal (Gast)


Lesenswert?

Noname schrieb:
> Der Compiler interpretiert diese Typdeklarationen anders als Du.
Es ist der Preprozessor, nicht der Compiler

von asdfg (Gast)


Lesenswert?

egal schrieb:
> Noname schrieb:
>> Der Compiler interpretiert diese Typdeklarationen anders als Du.
> Es ist der Preprozessor, nicht der Compiler

falsch.

von besserwissender klugscheissender Erbsenzähler (Gast)


Lesenswert?

egal schrieb:
> Es ist der Preprozessor

Nö, entweder preprocessor oder Präprozessor ;-)))

von Noname (Gast)


Lesenswert?

Noname schrieb:
>> Der Compiler interpretiert diese Typdeklarationen anders als Du.
egal schrieb:
>Es ist der Preprozessor, nicht der Compiler.
Du interpretiert die C-Sprachbeschreibung anders als ich. Ich halte sie 
nicht für einen Teil der Beschreibung des Preprozessors.

von besserwissender klugscheissender Erbsenzähler (Gast)


Lesenswert?

Noname schrieb:
> Preprozessors

Leute, bitte deutsch oder english, nicht denglish!

von Mongo (Gast)


Lesenswert?

To define präprocessor macros we can use #define. Its format is:

#define identifier replacement

When the präprocessor encounters this directive, it replaces any 
occurrence of identifier in the rest of the code by replacement. This 
replacement can be an expression, a statement, a block or simply 
anything. The präprocessor  simply replaces any occurrence of identifier 
by replacement.

von Noname (Gast)


Lesenswert?

Meine Güte. Ein Profi! Kann schon CopyNPaste!

von be kl Er (Gast)


Lesenswert?

But the preprocessor can do much more:
http://en.wikipedia.org/wiki/C_preprocessor

von Johann L. (gjlayde) Benutzerseite


Lesenswert?

typedef ist ein C-Schüsselwort.

Daß es kein Präprozessor-Direktive ist, ist schon am fehlenden # zu 
erkennen.

Um eine Quelle von allem Präprozessor-Ballast wie #if #ifdef #define 
#include etc. zu befereien und den "reinen" C-Code zu sehen, kann man 
zum Beispiel mit gcc:

Ausgabe des Codes nach stdout

$ gcc file.c -P -E <weitere Optionen>

Bewahren der Päprozessor-Ausgabe in file.i (C) bzw. file.ii (C++):

$ gcc file.c -P -save-temps <weitere Optionen>

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.