macro - vba convertir texte en nombre




Convertisseur de nombre entier en chaîne(en utilisant des macros) (2)

En C, vous pouvez l'utiliser ou si vous êtes désespéré et que vous voulez l'éviter, utilisez snprintf par exemple:

snprintf(my_str, sizeof(int), "%i", my_int);

Le problème avec votre macro est que vous pensez aux constantes, mais bien sûr, votre macro sera brisée quand vous avez besoin d'utiliser une variable contenant un entier. Votre macro essayera de codifier le nom de la macro par opposition à la valeur qu'il tient.

Si vous êtes correct avec les constantes, votre macro est "bonne", sinon elle est b0rked.

Je faisais les bases des macros. Je définis une macro comme suit:

#define INTTOSTR(int) #int

convertir un entier en chaîne.

Cette macro convertit-elle parfaitement l'entier en chaîne? Je veux dire y at-il des situations où cette macro peut échouer?

Puis-je utiliser cette macro pour remplacer les fonctions de bibliothèque standard comme itoa() ?

par exemple:

int main()
{
    int a=56;
    char ch[]=INTTOSTR(56);
    char ch1[10];
    itoa(56,ch1,10);
    printf("%s %s",ch,ch1);
    return 0;
}

Le programme ci-dessus fonctionne comme prévu.

Fait intéressant, cette macro peut même convertir la valeur float en chaîne.

par exemple:

INTTOSTR(53.5);

fonctionne bien.

Jusqu'à présent, itoa fonction itoa pour convertir int en string dans tous mes projets. Puis-je le remplacer itoa confiance dans tous les projets? Parce que je sais qu'il y a moins de frais généraux en utilisant l'appel de macro que de fonction.


Les macros s'exécutent pendant (avant d'être exact) l'heure de compilation, donc vous pouvez convertir un nombre littéral dans votre code source en une chaîne mais pas un nombre stocké dans une variable

Dans votre exemple, INTTOSTR(56) utilise l'opérateur de stringification du préprocesseur qui aboutit finalement à "56" . Si vous l'appeliez sur une variable, vous obtiendriez le nom de la variable mais pas son contenu.





macros