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 )