2010-12-14 1 views
2

Voici mon scénario: J'ai un ensemble de fichiers source que je préférerais ne pas modifier, mais je voudrais remplacer certains des littéraux de chaîne avec d'autres valeurs. Voici un exemple:En C++, est-il possible d'utiliser un littéral de chaîne comme nom de macro?

#define "oldString" "newString" 
+2

** Si ** cela fonctionnait, le résultat serait identique à tout ce que vous obtiendriez si vous modifiez directement le code source. Placez la source dans le contrôle de version afin de pouvoir suivre les changements que vous avez effectués. Ou écrivez un script qui masse la source avant chaque compilation. Puisque vous compilez la source (plutôt que de simplement la regarder comme référence lors du débogage, par exemple), vous ne devriez pas avoir à le modifier de la façon que vous avez décrite. –

Répondre

5

Non, ce n'est pas possible. Si vous aviez déjà utilisé des macros à la place des chaînes, il aurait été simple de changer la définition de la macro pour utiliser une chaîne différente - mieux vaut tard que jamais, vous pourriez vouloir le faire maintenant.

+0

Super, merci pour la réponse rapide. Dans ce cas, les fichiers sources sont produits par une autre société, et changent assez fréquemment, alors j'espérais simplement déposer leurs fichiers (et faire un diff rapide pour m'assurer que rien d'important n'avait changé) et inclure ce fichier. Mon plan de sauvegarde consiste à écrire un script pour remplacer la chaîne, comme Rob K. l'a suggéré plus haut. – Freerobots

5

Non, #define vous permet de donner une valeur à un identificateur. Les identifiants ne peuvent pas contenir le caractère de citation.

Questions connexes