C操作符/\和\/做了什么?
任何人都可以在C中“声明”自己的运算符。。。。也就是说,如果一个人是C编译器大师,并且拥有C编译器的源代码!;-) 需要解答的其他问题:C操作符/\和\/做了什么?,c,compiler-construction,operators,history,algol,C,Compiler Construction,Operators,History,Algol,任何人都可以在C中“声明”自己的运算符。。。。也就是说,如果一个人是C编译器大师,并且拥有C编译器的源代码!;-) 需要解答的其他问题: 这些操作是如何进行的 C99?gcc 为什么被/\&\/丢弃 /\和\/运算符对哪些类型有效 搜索“/\ \/”自然不会返回任何结果。Wikipedia有一个页面既不包含/\也不包含\/。但我发现XML字符实体中内置了类似的表单运算符! 源添加:我在PDP的cc源文件“c00.c”中发现了一个有问题的示例: 实际实施: /\和\/运算符可追溯到1975年(至今
源添加:我在PDP的cc源文件“c00.c”中发现了一个有问题的示例:
实际实施:
/\和\/运算符可追溯到1975年(至今)。例如:(1975年),(1979年)以及现在(1992年-)在ISO C89标准中都没有定义/\or/运算符,我认为在任何早期版本中都没有定义它们。据我所知,它们在C99中肯定没有定义 以下是ANSI C89标准草案,供参考:
(你可能是某种神秘的预处理器魔法的牺牲品)C从未使用过这些操作符 在某些字符串系统中通常是转义码,不确定/\是否有任何意义。插入符号(
^
)执行按位异或
我不相信有“V”操作符。这是字母“V”(或者看起来非常像它的东西)。有人可能想命名一个变量。推测!
如果它们周围有空格,则:
a /\ b ===> a / b
a \/ b ===> a / b
逻辑:预处理阶段必须处理反斜杠和后面的字符,并且很可能将反斜杠空格视为空格,将反斜杠视为斜杠
也就是说,SUN C编译器(版本12)和GNU C编译器(版本4.4)都拒绝包含反斜杠的代码。但我可以很容易地相信,旧的、标准前的C预处理器对此不太小心
标准符合性
运营商从未参与过官方版本的C
此外,标准不允许我给出的解释(第5.1.1.2节翻译阶段,在C89和C99中),但非标准编译器当然不受标准的约束
在发布源后添加: 有趣!因此,'
a=b/\c
'将b和c的最大值分配给a,并且'a=b\/c代码>'以达到最低要求(或者,正如格雷格·休吉尔所指出的,反之亦然)。而且,在那些日子里,很可能现代的“+=
”操作符仍然被写成“=+
”,实际上是两个令牌(没有支持这个断言的证据;内存再次出现故障),因此假设的“a=/\b
'(或者,在现代符号中,a/\=b;
')将是最大赋值运算符,等等
我还意识到汤普森的ACM图灵奖演讲在某种程度上是相关的。我怀疑他们是否有任何意义。如果他们有过,那是很久以前的事了。据我所知,从C中删除的主要运算符只有=+和=-,它们是+=和-=的早期同义词。您可能需要查看DMR的证据。\/
看起来像,而/\
看起来像。它们也可能是和
分别为
我不记得在K&R第二版或任何其他C语言书籍中见过这些。我不确定\/
,但/\
是一个有效的构造。它用于将单行注释的两个斜杠放在单独的行上。例如:
/\
/ Comment content
这是因为反斜杠字符转义换行符,解析器继续运行,就好像它不在换行符中一样。如果反斜杠后面有空格或第二个正斜杠缩进,则此操作无效。正因为如此,你有可能避开尽可能多的新行,就像在
/\
\
\
\
\
/ Still a legal comment.
反斜杠也可以用在常规单行注释的末尾,使它们继续到下一行,如中所示
// Yet another comment \
This line is in the comment \\
And so is this one!
我猜这是对形式符号逻辑的引用:
/用于表示析取(或)
/\表示连词(和)我是。。。不知道这些字符对在C中曾经有过意义。是什么让你认为它们有意义?逻辑符号和和或?你在代码中的什么地方看到的?你能分享一些台词吗?很有趣!因此,'a=b/\c
'将b和c的最大值分配给a,并且'a=b\/c代码>'以执行最小值。而且,在那些日子里,很可能现代的“+=
”操作符仍然被写成“=+
”,实际上是两个标记,因此假设的“a=/\b代码>'可能是最大赋值运算符,等等。很有趣+对于我遇到的最有趣的问题,一开始看起来像是最愚蠢的问题之一。我以前从未听说过这些操作符——如果它们卡住了的话,我们就可以省去多年来处理两次计算操作数的糟糕的最小/最大宏的麻烦了。+1表示奇怪的神秘预处理器魔法。这看起来就像你在IOCCC条目中看到的那样。我认为OP表示两个字符组合/`和
\/`这两个字符组合更有意义。如果有人在代码中这样做,我必须维护,他们最好还是离开这个州…@T.E.d.-用反斜杠换行将注释的/和*拆分成多行怎么样?\/
forsup
和/\`for
inf`是建立起来的数学符号。我在浏览C99标准时看到了这一点,我想,“嘿,这太酷了!…而且基本上是无用的。”有多少注释匹配正则表达式正确地处理了这一点?这真的很重要吗,除了那些不得不担心这些细节的编译器作者?(回答:很少,也没有
// Yet another comment \
This line is in the comment \\
And so is this one!