2010-02-05 7 views
5

Je n'ai pas eu la référence Kernighan et Ritchie C depuis des années, mais je me souviens qu'il y avait une page là-dedans qui parlait de la façon d'entrer des caractères qui n'étaient pas disponibles pour vous. (Chemin du retour dans la journée, certains claviers ne disposaient pas des personnages comme », ~, etc.)Quelle est la combinaison de caractères alternatifs pour le caractère double Citation en C/C++?

Pour être clair, permettez-moi de donner un exemple. Je suis pas recherche d'un moyen d'obtenir des citations dans les chaînes mais plutôt, je veux remplacer:

printf("foo"); 

avec celle-ci:

printf([alternate sequence]foo[alternate sequence]); 

pour les curieux, j'ai un processus automatisé qui consiste à générer un code C/C++, mais la (source fermé) outil commercial Dans le cadre de ses flux de données, les bandes concernées ont tendance à se rétracter et la documentation est assez claire sur le fait qu'elles ne permettent pas d'y échapper.

EDIT:

Wow, je ne l'avais pas prévu une telle réponse lourde. Cela pourrait mériter un peu plus de détails sur mon processus. Je fais des systèmes de construction automatisés, ce qui signifie que je vis avec certaines restrictions quand il s'agit de changer le code que je compile. Pour l'instant, nous devons vivre avec l'hypothèse que je dois obtenir une chaîne, des espaces et tous, dans une définition de préprocesseur. Je suis déjà descendu le 'PreprocessorDefinition' road. Cela m'a laissé avec mon habitude fallback: Définir la chaîne dans l'environnement d'exploitation et que le fichier de projet défini la définition de là:

Preprocessor Definitions  WIN32;_DEBUG;THINGIE=$(THINGIE) 

L'espoir était que je pouvais contourner le décapage de MSVC des citations à quoi que ce soit remis au construire avec/D à l'aide d'un trigraphes, en faisant quelque chose comme ça dans mon build script d'automatisation:

ENV['THINGIE'] = "??''Yodeling Monkey Nuggets??''" 
run_msbuild_command 

Je crois qu'il est temps pour un plan C.

+0

Pouvez-vous traiter la sortie du programme? Si vous pouvez le faire, vous pouvez déclarer une séquence de caractères rares pour '' 'et rediriger la sortie de ce programme vers' sed' qui renvoie vos guillemets doubles –

+0

Il est temps de penser à générer un en-tête contenant les guillemets, puis y compris celle où vous avez besoin de la définition du pré-processeur –

Répondre

10

Vous cherchez un trigraph pour " personnage? Je ne pense pas qu'un existe.

Les trigraph n'existent pas pour tous les caractères. Seuls quelques caractères ont des séquences trigraphiques.

+3

Per 2,3 Trigraph séquences et 2.5 jetons Alternative, un remplacement pour la double-citation n'existe certainement pas –

+0

Trigraph était le mot que je recherchais. – Sniggerfardimungus

3

Je pense que vous parlez de trigraphs. Pour autant que je l'ai lu, il n'y a pas un pour le « caractère.

4

vous envisagez de trigraphes

Character Trigraph 
[   ??(
\   ??/ 
]   ??) 
^   ??' 
{   ??< 
|   ??! 
}   ??> 
~   ??- 
#   ??= 

mais » isnt sur la liste

8

Aucun selon la norme. Essayez d'inclure un en-tête avec une macro:

#define QUOTE(x) #x 

et générer un printf comme:

printf(QUOTE(hello)); 
+0

Comment cela aiderait-il si les citations sont effacées? –

+2

Vous voulez dire QUTOE (bonjour). +1 – Notinlist

+4

Voulez-vous dire '#define QUOTE (x) # x'? AFAIK, vos sorties de macros actuelles' "x "chaîne pour toutes les entrées –

0
mais la (source fermée) outil commercial impliqué citations de bandes dans ses flux de données et la documentation est tout à fait clair sur le fait qu'ils ne fournissent pas un moyen de leur échapper.

Cela ressemble à un outil de merde.

Il semble laid, mais vous pouvez essayer quelque chose comme ceci:

static const char foo[] = {'H', 'e', 'l', 'l', 'o', 0}; 

printf(foo); 

J'aime aussi la suggestion de dirkgently d'utiliser # dans une macro, mais je me demande comment cela pourrait faire avec des espaces?

+0

Mieux: 'const char foo []' – mark4o

+0

@mark: pourquoi est-ce mieux? –

+0

@ mark4o - Bien sûr. J'avais à l'origine 'static const char foo []' (comme je l'ai vu certains compilateurs génèrent du code qui copiera un grand tableau sur la pile sans le 'static' dans des circonstances comme ça, même quand' const') mais je pensais ce serait distraire à l'idée même - et cela pourrait provoquer des commentaires stupides, alors je l'ai laissé de côté. – asveikau

-1

Que pensez-vous d'utiliser ´ au lieu de '?

J'ai fait face au même problème et j'ai essayé de l'éviter en remplaçant le délimiteur de texte par quelque chose d'inoffensif.

Questions connexes