Какая альтернативная комбинация символов для символа двойной кавычки в C / C ++? - PullRequest
6 голосов
/ 05 февраля 2010

У меня не было упоминаний о Кернигане и Ричи С в течение многих лет, но я помню, что там была страница, где говорилось о том, как вводить символы, которые вам недоступны. (ДАЛЕЕ назад, на некоторых клавиатурах не хватало таких символов, как ", ~ и т. Д.)

Чтобы было понятно, приведу пример. Я не ищу способ получить кавычки в строках, но я хочу заменить это:

printf("foo");

с этим:

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

Для любопытных, у меня есть автоматизированный процесс, который включает генерацию кода на C / C ++, но коммерческий инструмент (с закрытым исходным кодом) задействует кавычки в своих потоках данных, и в документации совершенно ясно говорится о том, что они не предоставляют способ избежать их.

EDIT:

Ух ты, я не ожидал такого тяжелого ответа. Это может заслужить немного больше подробностей о моем процессе. Я занимаюсь автоматизированными системами сборки, что означает, что я живу с определенными ограничениями, когда дело касается изменения кода, который я компилирую. На данный момент мы должны жить с предположением, что я должен получить строку, пробелы и все в определении препроцессора. Я уже пошел по дороге PreprocessorDefinition . Это оставило меня с моим обычным отступлением: определите строку в операционной среде и задайте определение файла проекта оттуда:

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

Была надежда, что я смог обойти разбивку кавычек MSVC во всем, что было передано в сборку с / D, используя триграф, выполнив что-то вроде этого в моем скрипте автоматизации сборки:

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

Я думаю, пришло время для плана С.

Ответы [ 6 ]

10 голосов
/ 05 февраля 2010

Вы ищете триграф для " символа? Я не думаю, что он существует.

Триграфы существуют не для всех персонажей. Только несколько символов имеют последовательности триграфа.

8 голосов
/ 05 февраля 2010

Нет согласно стандарту. Попробуйте включить заголовок с макросом:

 #define QUOTE(x) #x

и сгенерируйте printf как:

 printf(QUOTE(hello));
4 голосов
/ 05 февраля 2010

вы думаете о триграфах

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

но "нет в списке

3 голосов
/ 05 февраля 2010

Я думаю, вы говорите о триграфах . Насколько я прочитал, для символа "нет".

0 голосов
/ 01 февраля 2018

Что вы думаете об использовании ´ вместо '?

Я столкнулся с той же проблемой и попытался ее избежать, заменив текстовый разделитель чем-то безобидным.

0 голосов
/ 05 февраля 2010
, но коммерческий инструмент (с закрытым исходным кодом) задействовал кавычки в своих потоках данных, и в документации совершенно ясно говорится о том, что они не предоставляют способ избежать их.

Звучит как дерьмовый инструмент.

Это выглядит ужасно, но вы можете попробовать что-то вроде этого:

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

printf(foo);

Мне также нравится предложение Диркгентли использовать # в макросе, однако мне интересно, как это будет с пробелами?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...