Je suis tombé sur un petit problème en essayant de faire un code correct du point de vue des constantes.
J'aurais aimé écrire une fonction qui prend un pointeur sur une structure constante, pour dire au compilateur "s'il vous plaît, dites-moi si je modifie la structure, parce que je ne veux vraiment pas le faire".
Il m'est soudain venu à l'esprit que le compilateur me permettra de le faire :
struct A
{
char *ptrChar;
};
void f(const struct A *ptrA)
{
ptrA->ptrChar[0] = 'A'; // NOT DESIRED!!
}
Ce qui est compréhensible, car ce qui est en fait const est le pointeur lui-même, mais pas le type vers lequel il pointe. J'aimerais cependant que le compilateur me dise que je fais quelque chose que je ne veux pas faire, si c'est possible.
J'ai utilisé gcc comme compilateur. Bien que je sache que le code ci-dessus devrait être légal, j'ai tout de même vérifié s'il émettrait un avertissement, mais rien n'est venu. Ma ligne de commande était :
gcc -std=c99 -Wall -Wextra -pedantic test.c
Est-il possible de contourner ce problème ?