2010-02-05 8 views
5

Non ho avuto la referenza di Kernighan e Ritchie C da anni, ma ricordo che c'era una pagina in cui si parlava di come inserire caratteri che non erano disponibili per voi. (Via del ritorno nel corso della giornata, alcune tastiere mancavano personaggi come", ~, etc.)Qual è la combinazione di caratteri alternativi per il characater con doppia citazione in C/C++?

Per essere chiari, lasciatemi fare un esempio. Sono non ricerca di un modo per ottenere le quotazioni nelle stringhe , ma piuttosto, voglio sostituire questo:

printf("foo"); 

con questo:

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

per i curiosi, ho un processo automatizzato che comporta la generazione di codice C/C++, ma il (closed source) strumento commerciale coinvolto strisce citazioni nei suoi flussi di dati e la documentazione è abbastanza chiara sul fatto che non forniscono un modo per sfuggire a loro.

EDIT:

Wow, non mi aspettavo una risposta così pesante. Ciò potrebbe meritare un po 'più di dettaglio sul mio processo. Sto facendo sistemi di build automatici, il che significa che vivo con alcune restrizioni quando si tratta di cambiare il codice che sto compilando. Per ora, dobbiamo convivere che devo ottenere una stringa, spazi e tutto, in una definizione di preprocessore. Ho già sceso il 'PreprocessorDefinition' road. Questo mi ha lasciato con la mia solita fallback: Definire la stringa nel contesto operativo e hanno impostato il file di progetto la definizione da lì:

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

La speranza era che potevo andare in giro spoliazione di MSVC di citazioni in nulla consegnato al costruire con/D utilizzando un trigraph, facendo qualcosa di simile nel mio script build automation:

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

Credo che sia arrivato il momento per un piano C.

+0

È possibile elaborare ulteriormente l'output del programma? Se puoi farlo, puoi dichiarare qualche rara sequenza di caratteri per '" 'e reindirizzare l'output di quel programma a' sed' che restituisce le virgolette doppie –

+0

Tempo di pensare a generare un'intestazione che contenga le virgolette, e quindi –

risposta

10

Siete alla ricerca di un trigraph per " personaggio? Non penso che esista.

I trigfi non esistono per tutti i caratteri. Solo pochi personaggi hanno sequenze trigraph.

+3

Per 2.3 sequenze Trigraph e 2.5 token alternativi, una sostituzione per il doppio preventivo sicuramente non esiste –

+0

Trigraph era la parola che cercavo. un decennio Grazie – Sniggerfardimungus

3

Penso che tu stia parlando di trigraphs. Per quanto ho letto, non ce n'è uno per il "carattere.

4

state pensando di trigraphs

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

ma" non sta sulla lista

8

Nessuno alla norma. Prova compreso un colpo di testa con una macro:

#define QUOTE(x) #x 

e generare un printf come:

printf(QUOTE(hello)); 
+0

Come sarebbe di grande aiuto se le virgolette fossero spogliate? –

+2

Vuoi dire QUTOE (ciao) +1 – Notinlist

+4

Vuoi dire '#define QUOTE (x) # x'? AFAIK, le tue uscite macro attuali' "x "' stringa per tutti gli input. –

0
ma il (closed source) strumento coinvolti strisce citazioni commerciali nei propri flussi di dati e la documentazione è molto chiaro su il fatto che non forniscono un modo per sfuggire a loro.

Sembra uno strumento scadente.

sembra brutto, ma si potrebbe provare qualcosa di simile:

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

printf(foo); 

Mi piace anche di dirkgently suggerimento di utilizzare # in una macro, però mi chiedo come sarebbe che fare con gli spazi?

+0

Migliore: 'const char foo []' – mark4o

+0

@mark: perché è meglio? –

+0

@ mark4o - Sicuro. Originariamente avevo 'static const char foo []' (come ho visto alcuni compilatori generare codice che in realtà copierà una grande matrice sullo stack senza 'static' in circostanze come questa, anche quando' const') ma pensavo sarebbe distraente per l'idea reale - e che potrebbe provocare commenti pignoli, quindi l'ho lasciato fuori. – asveikau

-1

Cosa ne pensi dell'uso di ´ anziché '?

Ho affrontato lo stesso problema e ho cercato di evitarlo sostituendo il delimitatore di testo con qualcosa di innocuo.