У меня не было Kernighan и Ritchie C ссылка в течение многих лет, но я помню, что была страница там, это говорило о том, как ввести символы, которые были недоступны Вам. (ПУТЬ назад в день, некоторые клавиатуры испытали недостаток в символах как", ~, и т.д.),
Чтобы быть ясными, позвольте мне дать пример. Я не ищу способ получить кавычки в строках, а скорее, я хочу заменить это:
printf("foo");
с этим:
printf([alternate sequence]foo[alternate sequence]);
Для любопытного у меня есть автоматизированный процесс, который включает генерирующий код C/C++, но коммерческий включенный инструмент (с закрытым исходным кодом) разделяет кавычки в своих потоках данных, и документация является довольно четкой на том, что они не позволяют выходить из них.
Править:
Ничего себе, я не ожидал такой тяжелый ответ. Это могло бы заслужить немного больше детали о моем процессе. Я делаю автоматизированные системы сборки, что означает, что я живу с определенными ограничениями когда дело доходит до изменения кода, который я компилирую. На данный момент мы должны жить учитывая, что я должен получить строку, пробелы и все, в определение препроцессора. Я уже шел по 'PreprocessorDefinition' road. Это оставило меня с моей обычной нейтрализацией: Определите строку в операционной среде и имейте файл проекта, устанавливает определение оттуда:
Preprocessor Definitions WIN32;_DEBUG;THINGIE=$(THINGIE)
Надежда состояла в том, что я мог обойти разделение MSVC кавычек в чем-либо врученном сборке с/D использование trigraph путем выполнения чего-то вроде этого в моем сценарии автоматизации сборки:
ENV['THINGIE'] = "??''Yodeling Monkey Nuggets??''"
run_msbuild_command
Я предполагаю, что время для плана C.
Вы ищете триграф для символа "
? Не думаю, что он существует.
Триграфы существуют не для всех персонажей. Только несколько символов имеют триграфные последовательности.
Я думаю, вы говорите о триграфах . Насколько я читал, для символа "нет ни одного".
, но коммерческий инструмент (с закрытым исходным кодом) включал разделение кавычек в свои потоки данных, и документация довольно четко указывает на то, что они не предоставляют способа избежать их.
Похоже на дрянной инструмент.
Выглядит некрасиво, но вы можете попробовать что-то вроде этого:
static const char foo[] = {'H', 'e', 'l', 'l', 'o', 0};
printf(foo);
Мне также нравится предложение dirkgently использовать #
в макросе, однако мне интересно, как это будет делать с пробелами?
вы думаете о триграфах
Character Trigraph
[ ??(
\ ??/
] ??)
^ ??'
{ ??<
| ??!
} ??>
~ ??-
# ??=
но " не входит в список
Нет в соответствии со стандартом. Попробуйте включить заголовок с макросом:
#define QUOTE(x) #x
и сгенерировать printf
как:
printf(QUOTE(hello));