Domanda

Non ho ricevuto i riferimenti a Kernighan e Ritchie C da anni, ma ricordo che c'era una pagina che parlava di come inserire personaggi che non erano disponibili per te.(MOLTO tempo fa, ad alcune tastiere mancavano caratteri come ", ~, ecc.)

Per essere chiari, faccio un esempio.Io sono non sto cercando un modo per ottenere virgolette 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 prevede la generazione di codice C/C++, ma lo strumento commerciale (a sorgente chiuso) coinvolto rimuove le virgolette nei suoi flussi di dati e la documentazione è abbastanza chiara sul fatto che non forniscono un modo per scappare loro.

MODIFICARE:

Wow, non mi aspettavo una risposta così pesante.Ciò potrebbe meritare qualche dettaglio in più sul mio processo.Sto realizzando sistemi di compilazione automatizzati, il che significa che vivo con alcune restrizioni quando si tratta di modificare il codice che sto compilando.Per ora, dobbiamo convivere con il presupposto che devo inserire una stringa, spazi e tutto il resto, in una definizione del preprocessore.Sono già andato giù Strada "Definizione del preprocessore"..Questo mi ha lasciato con il mio solito fallback:Definire la stringa nell'ambiente operativo e fare in modo che il file di progetto imposti la definizione da lì:

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

La speranza era di poter aggirare l'eliminazione delle virgolette da parte di MSVC in qualsiasi cosa consegnata alla build con /D utilizzando un trigrafo, facendo qualcosa di simile nel mio script di automazione della build:

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

Immagino sia giunto il momento di un piano C.

È stato utile?

Soluzione

Siete alla ricerca di un trigraph per il personaggio "? Non credo che ne esiste uno.

trigrammi non esistono per tutti i personaggi. Solo pochi personaggi hanno sequenze trigraph.

Altri suggerimenti

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

 #define QUOTE(x) #x

e generare una printf come:

 printf(QUOTE(hello));

stai pensando ai trigrafi

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

ma " non è nella lista

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

, ma la (closed source) strumento coinvolti strisce commerciali citazioni nei suoi flussi di dati e la documentazione è molto chiaro sul fatto che non forniscono un modo per sfuggire loro.

Suona come uno strumento di merda.

Sembra brutto, ma si potrebbe provare qualcosa di simile:

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

printf(foo);

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

Cosa ne pensi di usare ´ invece di '?

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

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top