Home
Navigation
Impressum
Coder Welten - Programmierung und Optimierung
Coder Welten
 
 

 

 

Variablen in C und C++, Typen und Sichtbarkeit

Variablen und Bezeichner in C und C++

Übersicht / Seite:

  1. Deklaration und Definition (von Variablen mit Beispielen und Listings)
  2. Datentypen und Sichtbarkeit (Gültigkeitsbereich und Typen von Variablen)

Gültigkeitsbereich und Typen von Variablen

Bei der Deklaration und Definition von Variablen ist es zwingend erforderlich den Typ und den Gültigkeitsbereich zu berücksichtigen. So ist der Typ einer Variablen von entscheidender Bedeutung bei der Reservierung des Speicherplatzes, denn ohne eine Typ-Angabe könnte der Compiler nicht wissen, wie groß der zu reser­vierende Speicherplatz in Bit und Bytes sein sollte oder wie die übergebenen Werte zu kodieren sind.
Der Gültigkeitsbereich entscheidet hingegen darüber, ob auf eine Variable zum Beispiel nur innerhalb einer Funktion existiert oder ob noch in weiteren Funktionen auf diese Variable zugegriffen werden kann.

Sichtbarkeit und Lebensdauer

Die Sichtbarkeit bzw. der Gültigkeitsbereich einer Variablen richtet sich danach, wo im Code einer Anwendung eine Variable deklariert und definiert wurde. Entscheidend für die Sichtbarkeit ist der in geschweifte Klammern gefasste Anweisungsblock, in dem eine Variable deklariert und definiert wurde. Sind in diesem Anweisungsblock weitere Anweisungsblöcke eingeschlossen, so ist eine Variable auch in diesen eingeschlossenen Blöcken sichtbar, nicht hingegen umgekehrt.

Nachfolgen zwei Beispiele zum besseren Verständnis.

Code der C Datei sichtbarkeit.c

#include <stdio.h>

int main() {

    int zweihundert  = 220;
    int fuenfhundert = 550;

    printf("Ausgangswert von int zweihundert:  %d\n", zweihundert);
    printf("Ausgangswert von int fuenfhundert: %d\r\n\r\n", fuenfhundert);

    if (zweihundert >= 200) {

        int zweihundert = 200;
        fuenfhundert    = 500;

        printf("innerhalb: %d\n", zweihundert);
        printf("innerhalb: %d\r\n\r\n", fuenfhundert);
    }

    printf("au\xe1 \berhalb: %d\n", zweihundert);
    printf("au\xe1 \berhalb: %d\n", fuenfhundert);

    getchar();
    return 0;
}

Sichtbarkeit von Variablen
Sichtbarkeit von Variablen

Im ersten Beispiel wurden die Variablen int zweihundert und int fuenfhundert innerhalb der Eintrittsfunktion am Anfang der Funktion notiert und beide Variablen sind somit in der ganzen Funktion sichtbar. Die Lebensdauer beider Variablen endet erst mit der schließenden Klammer der Funktion.

Anders sieht es mit der Variablen int zweihundert aus, die innerhalb des Anweisungsblockes notiert wurde, der zum if-Statement gehört. Diese zweite Variable ist nur innerhalb dieses Blockes gültig und überlagert nur innerhalb dieses Blockes die erste, gleichnamige Variable. Dementsprechend fällt die Ausgabe aus. Da die Variable außerhalb des Blocks nicht mehr zu sehen ist, wird die Variable zweihundert mit dem Ausgangswert von 220 ausgegeben und nicht mit dem innerhalb des Anweisungsblocks auf 200 veränderten Wert.
Mit dem Wert der Variablen fuenfhundert verhält es sich hingegen nicht so. Da diese Variable nicht innerhalb des Blockes neu definiert wurde, die erste Variable somit auch nicht innerhalb des zum if-Statement gehörenden Anweisungsblocks überlagert wird, verändert sich deren Wert bei der Ausgabe wie erwartet.

Code der C++ Datei sichtbarkeit.cpp

#include <iostream>
using namespace std;

int zweihundert  = 220;
int fuenfhundert = 550;

int main() {

    cout << "Ausgangswert von int zweihundert:  " << zweihundert << endl;
    cout << "Ausgangswert von int fuenfhundert: " << fuenfhundert << endl << endl;

    if (zweihundert >= 200) {

        int zweihundert = 200;
        int dreihundert = 300;
        fuenfhundert    = 500;

        cout << "innerhalb: " << zweihundert  << endl;
        cout << "innerhalb: " << dreihundert  << endl;
        cout << "innerhalb: " << fuenfhundert << endl << endl;
    }

    cout << "au\xe1 \berhalb: " << zweihundert  << endl;
    cout << "au\xe1 \berhalb: " << fuenfhundert << endl;

    cin.get();
    return 0;
}

Sichtbarkeit von globalen Variablen
Sichtbarkeit von lokalen und globalen Variablen

Im zweiten Beispiel wurden die Variablen int zweihundert und int fuenfhundert nicht innerhalb der Eintrittsfunktion notiert, sondern oberhalb von dieser, womit beide Variablen als globale Variablen nicht nur der main-Funktion, sondern allen Funk­tionen zur Verfügung stehen würden, insofern weitere Funktionen in dieser Datei notiert werden sollten.
Die Sichtbarkeit und Lebensdauer der Variable int dreihundert beschränkt sich hingen nur auf den zum if-Statement gehörenden Anweisungsblock, ein Zugriff außer­halb dieses Blocks auf diese Variable würde einen Fehler auslösen. Mit der inneren Variable zweihundert verhält es sich hingegen wie im ersten Beispiel.

Die wichtigsten Datentypen in C und C++

Wie bereits auf der vorausgehenden Seite unter Deklaration und Definition vermerkt, ist es erforderlich bei der Deklaration einer Variablen einen Datentyp anzugeben. Anderenfalls würde beim Debuggen eine Fehlermitteilung ausgegeben.
Der Datentyp entscheidet darüber, wieviel Speicherplatz für eine Variable zu reservieren ist und welche Operationen mit dem gespeicherten Wert durchgeführt werden können. So würde zum Beispiel bei der Verwendung von char ein Speicherplatz von 1 Byte reserviert, bei short von 2 Byte und bei Verwendung von int 4 Byte.
Das hört sich bei den heutigen Speichervolumen verschwindend wenig an, doch es gab auch Zeiten, bei denen der Arbeitsspeicher von Rechnern wesentlich begrenz­ter war und bei Mikrokontrollern ist es teilweise noch heute so.

In der Übersicht wurden die wichtigsten Datentypen für C und C++ berücksichtigt. Unterschieden wird ferner zwischen vorzeichenbehaftet (signed) und vorzeichenlos (unsigned). Erfolgt keine Angabe, so verteilt sich der Wertebereich wie bei der Verwendung des Schlüsselwortes signed zu (beinahe) gleichen Teilen auf negative und positive Zahlen.
Eine Angabe des Schlüsselwortes signed ist bei den Datentypen short, int und long nicht erforderlich, da Standard. Lediglich ob char ohne Angabe von signed als vorzeichenbehafteter oder vorzeichenloser Wertebereich interpretiert wird, ist vom Compiler abhängig.
Bei Verwendung des Schlüsselwortes unsigned verschiebt sich der Wertebereich in den positiven Bereich ganzer Zahlen, wodurch der Wertebereich nicht wirklich größer wird, weil zum Beispiel ein Manko nicht mehr berechnet werden könnte.
Die Größe des Wertebereiches von int ist vom System abhängig und würde bei einem Rechner mit einer 16-Bit-Architektur nur dem Wertebereich von short entsprechen.

Übersicht Datentypen:

Ganzzahlige Datentypen signed in C/C++

char        -128 bis +127
short       -32768 bis +32767
int         -2147483648 bis +2147483647 (int für integer)
long        -2147483648 bis +2147483647
long long   -9223372036854775808 bis +9223372036854775807


Ganzzahlige Datentypen unsigned in C/C++

unsigned char       0 bis 255
unsigned short      0 bis 65535
unsigned int        0 bis 4294967295
unsigned long       0 bis 4294967295
unsigned long long  0 bis 18446744073709551615


Datentypen für Fließkommazahlen in C/C++

float
double
long double


Weitere Datentypen in C++

bool        In C mit <stdbool.h>, falls vorhanden
wchar_t     In C mit <stddef.h>, falls vorhanden

Zusätzlich zu diesen Datentypen können noch eigene Datentypen definiert oder bereits definierte verwendet werden. Auch beim Datentyp string in C++ handelt es sich lediglich um eine definierte, jedoch sehr dienliche Klasse.

zurück: Variablen » Deklaration und Definition

 

Copyright © Verlag Horst Müller - Stendal - 2006 - Impressum - Datenschutz - Nutzungsbedingungen