J'essaie de convertir du code d'un langage à typage dynamique en C. Veuillez m'aider. Je vous prie d'être indulgent avec moi car je n'ai pas encore d'expérience pratique du C.
J'ai une fonction de distribution qui décide de la manière de convertir son entrée en fonction des critères suivants la valeur de l'argument drapeau.
void output_dispatcher(char *str, int strlen, int flag) {
char output[501];
char *result;
switch (flag) {
/* No conversion */
case 0:
result = str;
break;
case 1:
result = convert_type1(output, str, strlen);
len = strlen(result);
break;
/* ... */
}
/* do something with result */
}
J'ai actuellement 5 convertisseurs de sortie différents et ils sont tous (même ceux à venir) garantis de ne produire que 300-500 caractères. les futurs) sont garantis pour ne produire que 300-500 caractères. D'après mes lectures, il préférable d'utiliser une variable de tas plutôt que d'allouer dynamiquement de l'espace sur le pile, si possible. La déclaration de la fonction ressemble à ceci
static char * convert_type1(char *out, const char *in, int inlen);
Je veux éviter le strlen dans le dispatcher, puisqu'il n'est pas nécessaire pour recalculer la taille de la sortie car les convertisseurs de sortie la connaissent lorsqu'ils construisent la sortie. De plus, puisque je passe dans un pointeur à la variable de sortie je ne devrais pas avoir besoin de renvoyer le pointeur de résultat, n'est-ce pas ? Je modifie donc comme suit, mais j'obtiens une erreur de compilation "type incompatible".
void output_dispatcher(char *str, int strlen, int flag) {
char output[501];
switch (flag) {
/* No conversion */
case 0:
output = str; /* ERROR: incompatible type */
break;
case 1:
strlen = convert_type1(output, str, strlen);
break;
/* ... */
}
/* do something with result */
}
Cette approche peut-elle fonctionner, ou existe-t-il une meilleure méthode ?