3 votes

Pourquoi le langage C, contrairement au langage C++, interdit-il d'ajouter la qualification const aux deux niveaux d'un pointeur à pointeur ?

Je me trouve dans la situation suivante :

Une fonction crée un tableau de chaînes de caractères et le transmet à un ensemble d'autres fonctions. Ces autres fonctions ne doivent modifier ni les pointeurs pointés par le pointeur extérieur, ni les chaînes elles-mêmes, c'est pourquoi je les ai rendues constantes.

Exemple minimal :

void function(const char * const *arr) {
    /* Do something useful */
}

int main(void) {
    char **x;
    /* fill x and *x */
    function(x);
}

Lors de la compilation avec gcc ou clang, je reçois un avertissement indiquant que x est converti en un type de pointeur incompatible.

Bien que je comprenne pourquoi le type de pointeur est incompatible si je supprime le deuxième const dans la liste des paramètres de la fonction (expliqué ici : Pourquoi le passage de char** en const char** génère-t-il un avertissement ? ), je ne comprends pas pourquoi elle est incompatible avec la const.

La compilation avec un compilateur c++ ne me donne pas d'avertissement (voir la comparaison ici) : https://gcc.godbolt.org/z/YND5U7 )

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X