PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Fragen zu C



Da_Vinci13
08.12.2008, 18:05
Ich hab 2 Fragen zu C:

1.
#define NZAHLEN 10


Das stand im C-Tutorlial. Meine Frage ist, ob #define bedeutet, dass jetzt eine Definition kommt in diesem Fall NZAHLEN 10?

2. Was bedeutet int? Ich hab im C-Tutorial eine Antwort gesucht, aber irgendwie versteh ich die nicht...

Würde mich über Anworten freuen!
Grüsse!

p_mork
08.12.2008, 18:31
Es ist ganz einfach: #define sagt dem Präprozessor, dass im Quellcode jedes Wort NZAHLEN durch eine 10 ersetzt wird, bevor dieser an den Compiler übergeben wird.

Ein int ist ein Variablentyp, der je nach Compiler/Prozessorarchitektur verschiedene Zahlenbereiche abdecken kann, beim AVR z.B. ist er 16 Bit lang, geht also von -2^15 bis +2^15-1. Variablen sind eine Art Platzhalter für Zahlen, die zur Laufzeit des Programms in die Variable reingeschrieben werden können.

MfG Mark

Da_Vinci13
08.12.2008, 18:50
Danke für die schnelle Antwort!
Also ist char (8) short (16) long (32) long long (64) in int (8, 16, 32, 64) definert?

p_mork
08.12.2008, 20:47
Nicht ganz, int ist ein eigenständiger Variablentyp, genauso wie char, short, long ... . Nur ist die Größe von int durch das Zielsystem und den Compiler festgelegt, während die meisten anderen Datentypen unabhängig davon immer die gleiche Größe haben.

thewulf00
09.12.2008, 06:51
@p_mork: Ich staune über diese tolle Erklärung! Einfach und 100%ig korrekt. Da können sogar "alte Hasen" nochmal drüber nachdenken. Vielen Dank!

Phantomix
09.12.2008, 09:28
der tms320 dsp hat 16 bit char und int ^^

p_mork
09.12.2008, 15:58
DSPs sind da eine Ausname, weil einige von ihnen 8 bzw 16 bit nicht verarbeiten oder aus dem Speicher laden/speichern _KÖNNEN_. Deshalb ist der Compiler gezwungen, 16 oder 32 bit zu nehmen. Ich nehme an, dass es auch bei den TMS320 der Fall ist.

Da_Vinci13
09.12.2008, 16:29
OK.
Dann versteh ich das jetzt was int bedeutet! Danke!

Grüsse!

Phantomix
09.12.2008, 20:06
Exakt, p_mork. Wollten mir zwei Kollegen (die schon länger damit arbeiten) erst auch nicht glauben, aber es ist wirklich so, dass man mit 16 bit chars rechnen kann*g* auch wenn unsigned int "sauberer" ist...

thewulf00
10.12.2008, 07:09
unsigned int oder 16 bit chars - das ist irrelevant. Wenn es das selbe ist, ist weder das eine, noch das andere "sauberer" - auch wenn einige Kollegen das anders _fühlen_.
Schau mal in die Header - da ist es eh nur ein define.

Phantomix
10.12.2008, 10:08
Du magst damit Recht haben, dass der Code in beiden Fällen funktioniert und es sowohl dem Prozessor als auch dem Programmierer egal sein kann.

Will man aber solchen Code portieren bekommt man Probleme, wenn an allen Enden "char" steht (den Fall hatte ich erst kürzlich*g*) und man nicht sofort weiß ob 8 oder 16 bit benötigt werden.

Prinzipiell kann ich die Verwendung einer Headerdatei à la "types.h" empfehlen wo für die Zielplattform passend die Typen, z. B. uint16, uint32, uint8,... definiert sind. Das lässt sich dann ganz einfach austauschen.

Die Datentypen "char" und "int" werden übrigens nicht mit defines abgebildet, sondern compilerintern gehandhabt.