donné le code suivant:Comment éliminer l'avertissement pour passer tableau multidimensionnel comme tableau multidimensionnel const?
/* signatures */
int getParams(char params[MAX_PARAM_LEN][MAX_LINE_LEN]);
int getVersion(const char params[MAX_PARAM_LEN][MAX_LINE_LEN],
const char* tagName);
/* initializing */
char params[MAX_PARAM_LEN][MAX_LINE_LEN] = {};
/* getting parameters */
paramCount = getParams(params); /* OK, params match with getParams signature */
/* processing the params array */
i = getVersion(params, "version"); /* warning: passing arg 1 of `getVersion' from incompatible pointer type */
Je vois que le constness est le problème, mais je ne sais pas pourquoi ou comment l'éviter. Ce que je veux, c'est une fonction qui ne peut plus modifier le params
. Tout conseil est le bienvenu (outre la désactivation de cet avertissement ou la suppression de const dans la fonction de traitement).
Merci: Visko
Merci, avec un #define param_const_t const char (*) [MAX_LINE_LEN] ce n'est pas si moche. C'est juste un non-sens pour moi que cette rigueur croissante "casting" provoque un avertissement. – Visko
J'utilise l'initialiseur {} depuis un moment. J'utilise gcc, mais je n'ai eu aucun problème avec le compilateur de Visual Studio. Maintenant que vous avez mentionné, j'ai essayé avec le compilateur de cadul (qui est si ANSI standard qu'il n'accepterait pas // comme commentaire) et il échoue. Une autre chose non-sens ... – Visko
@Visko: AFAIK, Visual Studio ne l'acceptera pas non plus, en supposant que vous compilez en C, pas en C++. Et votre question est marquée C. – AnT