12
votes

Pouvez-vous développer # définir les littéraux strings?

Y a-t-il un moyen d'obtenir le pré-processeur C ++ pour développer une valeur de définition d'un # dans une chaîne littéral?
Par exemple:

#define NEW_LINE '\n'
Printf("OutputNEW_LINE"); //or whatever


2 commentaires

@Gman toutes les alternatives «moins laides»?


Eh bien, vous pouvez simplement utiliser \ n directement dans les chaînes. La norme C charge que ce caractère unique sera étendu à la plate-forme utilisée comme délimiteur / terminateur de ligne, au moins lors de la rédaction de fichiers texte et de la console.


5 Réponses :


6
votes

Si je me souviens bien, il est xxx


3 commentaires

Donc, cela sera élargi à la limite de la construction et non via une installation de formatage de Printf?


Oui, le compilateur C concaténera automatiquement les littéraux de chaînes adjacents, bien que le #define puisse définir New_line comme "\ n" et non "\ n" pour que cela fonctionne, je pense.


+1 pour contrecarrer le bowvote injustifié. (Ce n'était pas mon bowvote, mais c'était peut-être parce que le code ne fonctionnera pas avec #define New_line '\ n' (avec des guillemets simples), comme indiqué dans la question de Adam. Dur mais une possibilité.)



25
votes

Cela le fera:

#define NEW_LINE "\n"         // Note double quotes
Printf("Output" NEW_LINE);


0 commentaires

2
votes

Vous pouvez faire ce qui suit.

#define NEW_LINE "\n"
printf("Output" NEW_LINE);


0 commentaires

-1
votes

Bien ....

printf("Output%s", NEW_LINE); 


2 commentaires

Exactement, mais beaucoup plus facile à maintenir à long terme :)


mmmm ... pas vraiment, vous devrez toujours tout recompiler si les changements #define et la virgule manquante ne devraient pas avoir aucune cause de problème si quelque chose dans le texte change, comme vous pouvez toujours ajouter des espaces réservés et des variables sans casser quelque chose. Au moins à mon avis.



1
votes
#define NEW_LINE "\n"
printf("Output" NEW_LINE); //or whatever
should do the trick.

0 commentaires