1
votes

comment concaténer deux entiers positifs à l'aide de macros?

J'ai besoin d'écrire un programme pour joindre deux entiers positifs pour former un autre entier positif en utilisant des macros. Exemple, si x = 12 , y = 35 et que la réponse doit être 1235 . Comment dois-je faire cela?


3 commentaires

Dans quelle langue ou dans quel environnement se trouvent ces macros?


J'utilise le langage C pour cela


@Aye: vous pouvez accepter l'une des réponses en cliquant sur la coche grise sous son score


4 Réponses :


2
votes

Il vous suffit d'utiliser l'opérateur ##

Il est souvent utile de fusionner deux jetons en un tout en développant les macros. C'est ce qu'on appelle le collage de jetons ou la concaténation de jetons. L’opérateur de prétraitement ‘##’ effectue le collage de jetons. Lorsqu'une macro est développée, les deux jetons de chaque côté de chaque opérateur «##» sont combinés en un seul jeton, qui remplace alors le «##» et les deux jetons d'origine dans le développement de la macro. Généralement, les deux seront des identifiants, ou l'un sera un identifiant et l'autre un numéro de prétraitement. Lorsqu'ils sont collés, ils créent un identifiant plus long. Ce n’est pas le seul cas valable. Il est également possible de concaténer deux nombres (ou un nombre et un nom, tels que 1.5 et e3) en un nombre. En outre, les opérateurs à caractères multiples tels que + = peuvent être formés par collage de jetons.

Depuis https://gcc.gnu.org/onlinedocs/cpp/Concatenation. html

Donc, dans votre cas, #define CONCAT_NUMBER (FIRST, SECOND) (FIRST ## SECOND) devrait fonctionner


1 commentaires

@Caleb Cela fonctionne si les jetons sont connus au moment de la compilation, même pour les jetons numériques, testez-le onlinegdb.com/B1mhWK2s4




0
votes

Exemple, si x = 12, y = 35 et la réponse doit être 1235. Comment dois-je faire cela?

Vous devez décaler x vers la gauche d'un certain nombre de chiffres décimaux qui dépend du nombre de chiffres dans y . Alors, quel est le nombre de chiffres dans y ? Eh bien, c'est la partie entière de log (y) . Et pour accomplir le changement, vous devez multiplier x par 10 pour atteindre cette valeur. Ainsi, l'expression mathématique dont vous avez besoin est, en fonction de la langue que vous utilisez, quelque chose comme:

finalValue = x*(10^^(floor(log(y))) + y;

Traduisez cela dans la langue de votre choix et vous devriez avoir ce que vous voulez.


1 commentaires

Cela entraînera des pénalités d'exécution et / ou dépendra du compilateur pour en déduire qu'il ne change pas de valeur. Une solution macro-basée est plus efficace.



0
votes

Si vous essayez de transmettre les variables x et y à la MACRO, cela ne peut pas être fait. Comme l'expansion des macros se produit au moment de la compilation.

Si vous souhaitez passer la valeur directe à la macro, la concaténation peut être effectuée comme suit-

#define CONCATENER (NUM_1, NUM_2) (NUM_1 ## NUM_2)


2 commentaires

Vous n'aimez pas ma macro CONCAT1 ?


J'ai exécuté et vérifié votre code. Cela fonctionne et donne le résultat attendu. La seule limitation est la taille.