2009-11-15 5 views
14

Quel est le moyen le plus simple de concaténer les chaînes définies dans les macros. -à-dire le code pseudo Je cherche serait comme:Concaténation des chaînes dans les macros - C++

#define ROOT_PATH "/home/david/" 
#define INPUT_FILE_A ROOT_PATH+"data/inputA.bin" 
#define INPUT_FILE_B ROOT_PATH+"data/inputB.bin" 
... 
#define INPUT_FILE_Z ROOT_PATH+"data/inputZ.bin" 

La seule façon que je connaisse est d'utiliser strcat dans le code, ou en utilisant la classe de chaîne, puis la méthode c_str, mais il peut obtenir désordre quand j'ai beaucoup de fichiers d'entrée. Je voudrais simplement utiliser INPUT_FILE_A, etc. directement et ne pas avoir beaucoup de variables locales. Y at-il un bon moyen de le faire?

Merci.

Répondre

42

Le compilateur automatiquement concaténer des chaînes adjacentes:

#define ROOT_PATH "/home/david/" 
#define INPUT_FILE_A ROOT_PATH "data/inputA.bin" 

Ou plus générique:

#define INPUT_FILE_DETAIL(root,x) root #x 
#define INPUT_FILE(x) INPUT_FILE_DETAIL(ROOT_PATH "data/", x) 
-3

Shell a été "manger" les citations. Ainsi, la ligne suivante devait utiliser:

-DROOT_PATH=\"some-string"\