2010-02-05 11 views
5

No he tenido la referencia de Kernighan y Ritchie C en años, pero recuerdo que había una página que hablaba de cómo ingresar caracteres que no estaban disponibles para usted. (Camino de vuelta en el día, algunos teclados carecían de personajes como", ~, etc.)¿Cuál es la combinación de caracteres alternativos para el carácter de comillas dobles en C/C++?

Para que quede claro, te voy a dar un ejemplo. Estoy no buscando una manera de obtener las cotizaciones en las cadenas , sino más bien, quiero reemplazar esto:

printf("foo"); 

con esto:

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

para los curiosos, tengo un proceso automatizado que implica la generación de código C/C++, pero el (código cerrado) herramienta comercial implicó tiras citas en sus flujos de datos y la documentación es bastante clara sobre el hecho de que no proporcionan una forma de escapar de ellos.

EDIT:

Vaya, no esperaba una respuesta tan pesada. Esto podría merecer un poco más de detalle en mi proceso. Estoy haciendo sistemas de compilación automatizados, lo que significa que vivo con ciertas restricciones cuando se trata de cambiar el código que estoy compilando. Por ahora, tenemos que vivir con la suposición de que tengo que obtener una cadena, espacios y todo, en una definición de preprocesador. Ya bajé al 'PreprocessorDefinition' road. Esto me dejó con mi repliegue habitual: Definir la cadena en el entorno de funcionamiento y tiene el archivo de proyecto establece la definición de allí:

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

La esperanza era que no podía moverse por extracción de las citas de MSVC en nada se entregarán a la construir con/D usando un trigraph, haciendo algo como esto en mi Creación de un script de automatización:

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

supongo que es hora de un plan C.

+0

¿Puede seguir procesando la salida del programa? Si puede hacer eso, puede declarar una secuencia de caracteres raros para '" 'y canalizar la salida de ese programa a' sed', que devuelve las comillas dobles. –

+0

Tiempo para pensar en generar un encabezado que contenga las comillas, y luego incluyendo eso donde necesita la definición del preprocesador. –

Respuesta

10

Usted está buscando un trigraph para " personaje? No creo que uno exista.

Los grabados no existen para todos los caracteres. Solo unos pocos caracteres tienen secuencias de trigrafos.

+3

Por 2.3 secuencias Trigraph y 2.5 tokens Alternativos, un reemplazo para la comilla doble definitivamente no existe. –

+0

Trigraph era la palabra que buscaba. No he escuchado eso en aproximadamente una década. Gracias. – Sniggerfardimungus

3

Creo que estás hablando de trigraphs. Por lo que he leído, no hay uno para el "carácter.

4

usted está pensando en trigrafos

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

pero" isnt en la lista

8

Ninguno según el estándar. Trate de que incluye una cabecera con una macro:

#define QUOTE(x) #x 

y generar una printf como:

printf(QUOTE(hello)); 
+0

¿Cómo ayudaría eso si se quitan las comillas? –

+2

¿Quiere decir QUTOE (hello). +1 – Notinlist

+4

¿Quiere decir '#define QUOTE (x) # x'? AFAIK, sus salidas macro actuales' 'x "' cadena para todas las entradas –

0
pero el (código cerrado) de la herramienta involucrados tiras cotizaciones comerciales en sus flujos de datos y la documentación es bastante claro en el hecho de que no proporcionan una forma de escapar de ellos.

Suena como una herramienta horrible.

se ve feo, pero usted podría intentar algo como esto:

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

printf(foo); 

También me gusta de dirkgently sugerencia de utilizar # en una macro, sin embargo, me pregunto cómo que ver con espacios?

+0

Mejor: 'const charla foo []' – mark4o

+0

@mark: ¿por qué es eso mejor? –

+0

@ mark4o - Claro. Originalmente tenía 'static const char foo []' (como he visto algunos compiladores generan código que en realidad copiará una matriz grande en la pila sin el 'static 'en circunstancias como esta, incluso cuando' const') pero pensé sería una distracción para la idea real, y podría provocar comentarios quisquillosos, así que lo dejé fuera. – asveikau

-1

¿Qué opinas sobre el uso de ´ en lugar de '?

Me enfrenté al mismo problema e intenté evitarlo reemplazando el delimitador de texto por algo inofensivo.

Cuestiones relacionadas