任何人都可以在C中“声明”自己的运算符....也就是说,如果一个人是C编译器大师并拥有C编译器的源代码! ; - )
需要解决的其他问题:
Google搜索“/ \ \ /”自然不会返回任何内容。维基百科的页面既不是/ \也不是\ /。但我发现表格类似的运算符内置于XML字符实体中!
/*
* Return the next symbol from the input.
* peeksym is a pushed-back symbol, peekc is a pushed-back
* character (after peeksym).
* mosflg means that the next symbol, if an identifier,
* is a member of structure or a structure tag or an enum tag
*/
symbol()
{
...
case BSLASH:
if (subseq('/', 0, 1))
return(MAX);
goto unkn;
case DIVIDE:
if (subseq('\\', 0, 1))
return(MIN);
if (subseq('*',1,0))
return(DIVIDE);
...
}
答案 0 :(得分:18)
ISO C89标准中没有/ \或/被定义为运算符,我认为它们在任何早期版本中都没有定义过。据我所知,它们在C99中肯定没有定义。
这是ANSI C89标准的草案,供参考:http://flash-gordon.me.uk/ansi.c.txt
(你可能是一些奇怪的奥术预处理魔法的受害者)
答案 1 :(得分:14)
答案 2 :(得分:10)
如果你周围有空格,那么:
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;
”分配给最小值(或者正如Greg Hewgill指出的那样,反之亦然),这似乎是合理的。而且,在那些日子里,现代的“+=
”运算符很可能仍被写成'=+
'并且实际上是两个令牌(没有支持这个断言的证据;再次失去记忆),所以假设的“a =/\ b;
”(或者,在现代符号中,“a /\= b;
”)将是最大赋值运算符等。
在我看来,汤普森的ACM图灵奖演讲“Reflections On Trusting Trust”在某种程度上是相关的。
答案 3 :(得分:6)
我不确定\/
,但/\
是有效的构造。它用于将单行注释的两个斜杠放在单独的行上。例如:
/\
/ Comment content
这是有效的,因为反斜杠字符会转义换行符,并且解析器会继续,就好像它不存在一样。如果反斜杠后面有空格或第二个正斜杠缩进,则无效。因此,可以像在
中那样转义任意数量的换行符/\
\
\
\
\
/ Still a legal comment.
反斜杠也可以在常规单行注释的末尾使用,以使它们继续到下一行,如
// Yet another comment \
This line is in the comment \\
And so is this one!
答案 4 :(得分:3)
C从未有过这些运营商。
通常/将是某些字符串系统中的转义码,不确定/ \是否有任何意义。
答案 5 :(得分:3)
我怀疑他们有没有意义。如果他们曾经做过,那是很长时间之前。我所知道的唯一主要的运算符是从C中删除的= +和= - ,它们是+ =和 - =的早期同义词。您可能希望查看DMR的Primeval C Page作为证据。
答案 6 :(得分:3)
我猜这些是对形式符号逻辑的引用:
http://en.wikipedia.org/wiki/Table_of_logic_symbols
/用于表示析取(OR) / \用于(不太频繁)表示连接(AND)
答案 7 :(得分:1)
Caret(^
)执行按位异或。
我不相信有“V”运算符。这就是字母'V'(或看起来很像它的东西)。有人可能想要命名一个变量。