maximal munch 在此 C 代码中是如何应用的?

-1 c++

我正在尝试并想知道一些关于 C 代码的内容。我在这里看到了一些相关的代码。我无法联系到给出答案的人。所以我想问你:

    int x = 100;

      while (0 <-------------------- x) {

          printf("%d ", x);

    }

    return 0;
Run Code Online (Sandbox Code Playgroud)

我回答了这个问题,是的,有一个错误。 /sf/answers/1937092461/

但正如你所看到的,它的回答是这样的: 90 80 70 60 50 40 30 20 10

<是c中的一个运算符。
<-不是c中的运算符。
-是c中的一个运算符。
--是c中的一个运算符。
---不是c中的运算符。

据我所知,最大的蒙克说,好吧,你--作为操作员继续前进。

样本可以成倍增加。(使用-and+运算符)从现在开始,我如何理解/解析这段代码?难道只有我一个人遇到错误吗?

Eri*_*hil 5

您正在使用 C++ 进行编译,而不是使用 C。

操作--者只能对一个对象进行操作。在 C 中,--运算符仅产生一个值,而不是左值。(左是可以指定对象的表达式。)因此编译器将报告0 <-------------------- x有错误。

在 C++ 中,--运算符生成左值。所以编译器会允许0 <-------------------- x.

在 C 和 C++ 中,解析都很简单:

  • 在 中<--------------------,构成令牌的最长字符序列(从头开始)是<,因此将其作为令牌并删除,留下--------------------
  • 在 中--------------------,构成令牌的最长字符序列(从头开始)是--,因此将其作为令牌并删除,留下------------------
  • 在 中------------------,构成令牌的最长字符序列(从头开始)是--,因此将其作为令牌并删除,留下----------------
  • 在 中----------------,构成令牌的最长字符序列(从头开始)是--,因此将其作为令牌并删除,留下--------------
  • 在 中--------------,构成令牌的最长字符序列(从头开始)是--,因此将其作为令牌并删除,留下------------
  • 在 中------------,构成令牌的最长字符序列(从头开始)是--,因此将其作为令牌并删除,留下----------
  • 在 中----------,构成令牌的最长字符序列(从头开始)是--,因此将其作为令牌并删除,留下--------
  • 在 中--------,构成令牌的最长字符序列(从头开始)是--,因此将其作为令牌并删除,留下------
  • 在 中------,构成令牌的最长字符序列(从头开始)是--,因此将其作为令牌并删除,留下----
  • 在 中----,构成令牌的最长字符序列(从头开始)是--,因此将其作为令牌并删除,留下--
  • 在 中--,构成标记的最长字符序列(从头开始)是--,因此它被视为标记并被删除,之后编译器继续处理进一步的源文本。

在 C 和 C++ 中,标记的序列都是0 < -- -- -- -- -- -- -- -- -- -- x。在 C 中,该表达式违反了约束。在 C++ 中则不然。