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年(至今

任何人都可以在C中“声明”自己的运算符。。。。也就是说,如果一个人是C编译器大师,并且拥有C编译器的源代码!;-)

需要解答的其他问题:

  • 这些操作是如何进行的 C99?gcc
  • 为什么被/\&\/丢弃
  • /\和\/运算符对哪些类型有效
  • 搜索“/\ \/”自然不会返回任何结果。Wikipedia有一个页面既不包含/\也不包含\/。但我发现XML字符实体中内置了类似的表单运算符!
    源添加:我在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.-用反斜杠换行将注释的/和*拆分成多行怎么样?
    \/
    for
    sup
    /\`for
    inf`是建立起来的数学符号。我在浏览C99标准时看到了这一点,我想,“嘿,这太酷了!…而且基本上是无用的。”有多少注释匹配正则表达式正确地处理了这一点?这真的很重要吗,除了那些不得不担心这些细节的编译器作者?(回答:很少,也没有
    // Yet another comment \
    This line is in the comment \\
    And so is this one!