Überschreiben (Programmierung)

aus Wikipedia, der freien Enzyklopädie

In der Informatik wird unter Überschreibung (engl. clobbering) das Überschreiben einer Datei oder die Speicherüberschreibung verstanden, das normalerweise unbeabsichtigt ist. Man verwendet selten auch das Wort Überschreiber, wenn eine Quelltextstelle unbeabsichtigt Speicher verdirbt.

Das Überschreiben passiert oft unbeabsichtigt, z. B. durch den Aufruf der Ausgabeumleitungsoperator (>). Um dies zu vermeiden, werden verschiedene Mittel angewendet, wie z. B. den Shell-Parameter set -o noclobber zu setzen (bash, ksh) oder set noclobber (csh, tcsh). Dies verhindert, dass > überschreibt, indem eine Fehlermeldung erscheint:[1]

$ echo "Hello, world" >file.txt
$ echo "This will overwrite the first greeting." >file.txt
$ set -o noclobber
$ echo "Can we overwrite it again?" >file.txt
-bash: file.txt: cannot overwrite existing file
$ echo "But we can use the >| operator ignore the noclobber." >|file.txt
$ # Successfully overwrote the contents of file.txt using the >| operator
$ set +o noclobber # Changes setting back

In höheren Programmiersprachen, wie z. B. C, wird konzeptbedingt meist nicht auf das Überschreiben einer Speicherstelle hingewiesen. Um das Überschreiben einer Speicherstelle zu verhindern, sind meist Schlüsselwörter für den Compiler vorhanden. In der Programmiersprache C ist für dieses Vorhaben das Schlüsselwort const vorgesehen, jedoch darf es nicht mit der Präprozessordirektive #define verwechselt werden. Stellt der Compiler bei der semantischen Analyse fest, dass eine Variable trotz Vereinbarung überschrieben werden soll, wird meist ein Fehler geliefert und der Übersetzungsvorgang abgebrochen.

In folgendem Beispielcode wird die Variable a mit dem Schlüsselwort const als Konstante deklariert. Bei einem anschließenden Übersetzungsversuch mit dem gcc-Compiler wird eine Fehlermeldung ausgegeben.

int main(void)
{
    const int a = 3;
    a = 4;
    return 0;
}
test.c: In function ‘main’:
test.c:7:2: error: assignment of read-only variable ‘a’

Siehe auch

Einzelnachweise