mikrocontroller.net

Forum: Compiler & IDEs Int Variablen


Autor: Stefan Gemmel (steg13)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
kann mir mal bitte jemand die verschiedenen Integer erklären oder sagen 
wo es steht.
Ich kenne:
int16_t  - 16bit mit Vorzeichen
uint16_t - 16bit ohne Vorzeichen
int8_t -    8bit mit Vorzeichen
uint8_t -   8bit ohne Vorzeichen

In Definitionen findet man dann noch solche Angaben:
#define u16 unsigned int - vermutlich 16bit ohne Vorzeichen
Gibt es sowas auch als 8bit mit Vorzeichen?

Welche Integerart habe ich als Funktionsrückgabe wenn ich schreibe:
int test(int x){
oder:
int yxz - also einfach nur int?

Autor: der mechatroniker (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Einfach nur int ist Definitionssache: C-Spezifikation sagt: mehr oder 
gleich viel Bits wie short, aber weniger oder gleich viel Bits wie long.

Üblich bei C-Compilern für DOS, µC Win3.1 etc. als Zielplattform:
short = 16 Bit
int = 16 Bit
long = 32 Bit

bei Zielplattform Windows (ab 95), Linux, Unix:
short = 16 Bit
int =  32 Bit
long = 32 Bit

8 Bit ist übrigens char, gibts natürlich auch als signed und unsigned.

Autor: Malte __ (malte) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Die "Größe" einer Variable kannst du dir im Zweifelsfall mit 
sizeof(int), compiliert für dein Zielsystem, ausgeben lassen.

Autor: Rolf Magnus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Stefan:

Die [u]int*_t-Typen sind Teil der ISO-C-Norm und im Header <stdint.h> 
definiert. Da gibt es auch noch [u]int_fast*_t und [u]int_least*_t. Die 
ersteren sind gedacht für Typen, die bei einer bestimmten Bitzahl 
möglichst schnell berechnet werden können, letztere für die 
kleinstmöglichen Typen mit mindestens der angegebenen Bitzahl.

Da viele Compiler die ISO-Norm immer noch nicht umsetzen (obwohl die 
aktuell gültige Version schon 8 Jahre alt ist), bietet nicht jeder 
diesen Header an. Entweder deshalb, oder weil der Programmierer nichts 
von <stdint.h> wußte, werden oft eigene Namen definiert. Aber bitte 
nicht mit #define, sondern mit typedef.

> Einfach nur int ist Definitionssache: C-Spezifikation sagt: mehr oder
> gleich viel Bits wie short, aber weniger oder gleich viel Bits wie
> long.

... und mindestens einen Wertebereich von -32767 bis 32767.

Autor: Stefan Gemmel (steg13)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke

meine Frage bezog sich auf AVR-GCC
(hab ich dummerweise vergessen zu erwähnen)

Ich denke jetzt ist alles klar

Autor: Rolf Magnus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Bei avr-gcc ist int 16 Bit groß und <stdint.h> ist vorhanden.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.