Kann GCC mich warnen, wenn ich die Felder einer const struct in C99 ändere?

Ich bin auf ein kleines Problem gestoßen, als ich versucht habe, konstanten Code zu erstellen.

Ich hätte gerne eine Funktion geschrieben, die einen Zeiger auf eine const-Struktur nimmt, um dem Compiler mitzuteilen, "bitte sag mir, ob ich die Struktur ändere, weil ich das wirklich nicht will".

Es kam mir plötzlich in den Sinn, dass der Compiler mir das erlauben wird:

struct A
{
    char *ptrChar;
};

void f(const struct A *ptrA)
{
    ptrA->ptrChar[0] = 'A'; // NOT DESIRED!!
}

Was verständlich ist, denn was eigentlich const ist, ist der Zeiger selbst, aber nicht der Typ, auf den er zeigt. Ich möchte, dass der Compiler mir sagt, dass ich etwas tue, was ich nicht tun möchte, wenn das überhaupt möglich ist.

Ich habe gcc als Compiler verwendet. Obwohl ich weiß, dass der obige Code legal sein sollte, habe ich trotzdem geprüft, ob er trotzdem eine Warnung ausgeben würde, aber nichts kam. Meine Befehlszeile war:

gcc -std=c99 -Wall -Wextra -pedantic test.c

Ist es möglich, dieses Problem zu umgehen?

Antworten auf die Frage(14)

Ihre Antwort auf die Frage