Concaténer int de chaîne à l'aide du Préprocesseur C
Je suis à essayer de comprendre comment je peux concaténer une #define
'd int #define
'd chaîne à l'aide de la C de Préprocesseur. Mon compilateur est GCC 4.1 sur CentOS 5. La solution devrait également fonctionner pour MinGW.
Je voudrais ajouter un numéro de version sur une chaîne, mais la seule façon que je peux l'obtenir pour fonctionner est de faire une copie du numéro de la version définit comme des chaînes de caractères.
La chose la plus proche que j'ai pu trouver est une méthode de citer les arguments de la macro, mais il ne fonctionne pas pour #define
s
C'est ne fonctionne pas.
#define MAJOR_VER 2
#define MINOR_VER 6
#define MY_FILE "/home/user/.myapp" #MAJOR_VER #MINOR_VER
Il ne fonctionne pas sans le #
s, soit parce que les valeurs sont des nombres et qu'il serait d'élargir à "/home/user/.myapp" 2 6
, ce qui n'est pas valide C.
Cela fonctionne, mais je n'aime pas avoir des copies de la version définit parce que j'ai besoin d'eux comme des numéros.
#define MAJOR_VER 2
#define MINOR_VER 6
#define MAJOR_VER_STR "2"
#define MINOR_VER_STR "6"
#define MY_FILE "/home/user/.myapp" MAJOR_VER_STRING MINOR_VER_STRING
- Double Possible de Convertir un préprocesseur jeton à une chaîne de caractères
Vous devez vous connecter pour publier un commentaire.
Classique du préprocesseur C question....
Le niveau supplémentaire d'indirection permettra le préprocesseur pour développer les macros avant qu'ils ne soient convertis en chaînes.
Une façon de travailler est d'écrire MY_FILE comme une représentation paramétrique de la macro:
EDIT: Comme l'a noté "Lindydancer", cette solution n'est pas de développer des macros dans les arguments. Un plus solution générale est:
MY_FILE
sont des macros, direA
etB
, cette macro s'étendre à"/home..." "A" "B"
.Vous pouvez le faire avec BOOST_PP_STRINGIZE:
C
tag.