6

多年来,我一直没有参考 Kernighan 和 Ritchie C,但我记得那里有一个页面讨论了如何输入您无法使用的字符。(在过去,有些键盘缺少像“,〜等”这样的字符)

为了清楚起见,让我举个例子。我不是在寻找一种在字符串中获取引号的方法,而是我想替换它:

printf("foo");

有了这个:

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

出于好奇,我有一个涉及生成 C/C++ 代码的自动化过程,但是(封闭源代码)商业工具涉及在其数据流中去除引号,并且文档非常清楚地说明它们不提供逃避的方法他们。

编辑:

哇,没想到反应这么大。这可能值得对我的过程进行更多详细说明。我正在做自动构建系统,这意味着在更改我正在编译的代码时我会受到某些限制。现在,我们必须接受这样的假设,即我必须将字符串、空格和所有内容放入预处理器定义中。我已经走上了“预处理器定义”的道路。这给我留下了我通常的后备:在操作环境中定义字符串并让项目文件从那里设置定义:

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

希望是通过在我的构建自动化脚本中执行以下操作,我可以绕过 MSVC 在使用 /D 使用三元组传递给构建的任何内容中去除引号:

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

我想是时候制定 C 计划了。

4

6 回答 6

10

您正在寻找字符的三元组吗?"我不认为一个存在。

并非所有字符都存在三元组。只有少数字符具有三元组序列。

于 2010-02-05T18:03:36.107 回答
9

没有按照标准。尝试包含一个带有宏的标题:

 #define QUOTE(x) #x

并生成一个printf

 printf(QUOTE(hello));
于 2010-02-05T18:05:01.600 回答
4

你在想三连音

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

但是“不在列表中

于 2010-02-05T18:04:57.560 回答
3

我想你说的是三元组。据我所读," 字符没有一个。

于 2010-02-05T18:04:00.107 回答
0
但是(封闭源代码)商业工具涉及在其数据流中去除引号,并且文档非常清楚地表明它们没有提供逃避它们的方法。

听起来像一个糟糕的工具。

它看起来很难看,但你可以尝试这样的事情:

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

printf(foo);

我也喜欢 dirkgently 建议#在宏中使用,但是我想知道这对空格有什么影响?

于 2010-02-05T18:15:35.857 回答
-1

您如何看待使用´而不是'

我遇到了同样的问题,并试图通过用无害的东西替换文本分隔符来避免它。

于 2018-02-01T19:32:31.800 回答