2010-04-08 13 views

Répondre

5

C est strictement statique, vous ne pouvez pas "rechercher" si une variable a déjà été déclarée. Si vous créez un générateur de code, pourquoi ne pas lire les lignes de code et voir ce qui a été déclaré?

+0

En fait, je suis en train de générer plusieurs versions du fichier, puis je génère tout un tas de correctifs. Ces correctifs insèrent des macros, et certaines macros se développent en déclarations, donc je ne peux pas tout savoir au moment de la génération, car la combinaison de patchs peut être assez compliquée – LB40

0

Pas vraiment, non. Pas à moins de compter essayer de l'utiliser et voir si votre code compile.

Vous pouvez essayer de pirater quelque chose avec le préprocesseur pour des variables spécifiques, un peu comme le standard #ifdef en haut de chaque fichier include. Cela ne serait pas conscient de la portée, car le préprocesseur s'exécute bien avant le compilateur.

C n'est pas un langage très dynamique de cette façon.

+0

je suis d'accord, mais je n'arrive pas à trouver une astuce CPP ... – LB40

1

Non, il n'y en a pas. Cela fait beaucoup de choses que font les compilateurs.

Une manière courante de créer un nom de variable unique consiste à utiliser un nom de variable très improbable, si possible combiné avec le numéro de ligne. Quelque chose comme

// beware, brain-compile code ahead! 
a_rather_unlikely_variable_name_by_sbi_ ## __LINE__ 
0

La variable elle-même est-elle générée par votre générateur ou par l'utilisateur? Lorsque vous générez la variable vous-même, vous pouvez émettre un jeton de préprocesseur avec la variable et vérifier plus tard si ce jeton existe.

0

Je suis assez en retard, bien il y a un moyen facile de le savoir, avec des fichiers texte; écrivez le nom de la variable dans un fichier dès que vous le déclarez, puis vérifiez plus tard si le nom est écrit. suffit de faire 3 macros "DEF" "IF_DEF" et "IF_NOT_DEF" et ça a l'air bien. Vous ne pouvez pas rechercher en C, mais vous pouvez rechercher dans un fichier. Mais cela prend un peu de mémoire.

Questions connexes