C: Zuweisen "static const char * const" zu "static const char *"

Ich habe ein Programm mit einigen globalen strings definiert, die am oberen Rand der Datei wie folgt:

static const char * const STRING_A = "STRING A";
static const char * const STRING_B = "STRING B";

Dann in die Hauptprogramm-Schleife, die ich immer wieder aufrufen einer Funktion. Diese Funktion enthält einen Zeiger, die auf den oben genannten Saiten, je nach Benutzereingabe. Standardmäßig möchte ich es so eingestellt werden, STRING_A, was ich so im wesentlichen haben, ist dies:

//Called repeatedly from a loop.
void input_function()
{
    static const char *current = STRING_A;

    //Do stuff and reassign different strings to "current"
    ...
}

Das problem, dass ich habe ist, dass beim kompilieren bekomme ich die Fehlermeldung "Fehler: element-Initialisierer ist nicht konstant". Dies ist mit GCC 4.7.2. Was verwirrt mich mehr, dass der Fehler verschwindet, wenn ich loszuwerden, die "static" - Schlüsselwort in der Eingabe-Funktion. Dies ist keine Lösung aber, wie Sie das Schlüsselwort static ist erforderlich für die Funktion zum verfolgen des aktuellen Strings zwischen den anrufen.

Natürlich habe ich dieses Problem beheben könnte in vielerlei Hinsicht die meisten einfach nur loszuwerden einige der const-Qualifizierer. Aber ich möchte verstehen, warum dies nicht funktioniert.

Mein Aktuelles Verständnis ist, dass die globalen string-Variablen können nicht geändert werden, um auf verschiedenen Saiten, und kann weder deren einzelne Zeichen geändert werden. Das static-Schlüsselwort, hält Sie lokal auf dem Quell-Datei.

Für die current variable in meiner Funktion mein Verständnis ist, dass das statische-Schlüsselwort erlaubt es zu behalten Ihren Wert über mehrere Aufrufe der Funktion, und dass die const-Kennzeichner-in diesem Fall bedeutet, dass der string verweist current ändern können - nicht aber die Zeichen der Zeichenfolge, die Sie zeigt.

Ich bin nicht zu sehen, alle Konflikte, die in diesen äußerungen, so verstehe ich nicht, warum der compiler gibt einen Fehler - vor allem, warum es nicht ein problem, wenn current's "static" - Bezeichner entfernt.

Dank, wenn jemand erklären kann, was das problem hier ist.

InformationsquelleAutor Adam Goodwin | 2013-08-10
Schreibe einen Kommentar