gpt4 book ai didi

programming-languages - 编程语言中的空语句是 C、Java、...汇编程序中的无操作吗?

转载 作者:行者123 更新时间:2023-12-04 08:24:56 25 4
gpt4 key购买 nike

前几天看到了for ( ; ; )导致无限循环。这让我想知道两件事。

  • 汇编器中的空语句 ( ; ) 是否为空语句
  • 为什么在上面给出的例子中它被评估为“真”?
  • 最佳答案

    在这里从 C 的角度回答:

    不,;不会转换为无操作指令。无操作指令(例如 nop )是显式的汇编级指令,它们往往会实际执行某些操作(因为它们消耗时间,但不一定影响 CPU 内的任何存储状态)。
    for(;;)片段是 for三个部分中的每一个都具有默认值的循环。你可以想到;在这种情况下,它不是一个空语句,而是部分 (a) 的分隔符。

  • 第一部分(初始化)默认为“什么都不做”。
  • 第二部分是循环将继续的条件。它的默认设置是永远继续。
  • 第三部分,在开始后续迭代之前要采取的步骤,也是“什么都不做”。

  • 过去,我曾因使用以下内容而犯下滔天罪行:
    #define ever ;;
    #define forever for (;;)

    这样我就可以将无限循环写为:
    for(ever) { ... }
    forever { ... }

    我当然不会在今天这样做。

    (a) 一个“真实”的空语句,如下:
    if (condition) {
    a = b;
    ;
    }

    也可能不会转化为无操作。它很可能根本不会产生任何代码。

    请记住,这是基于相当普遍的行为。在 C 方面, ;只要不影响 C 环境中的“虚拟机”,就可以生成它想要的任何较低级别的代码。例如,如果您启用了分析,它可能会增加隐藏行号变量并更新覆盖率统计信息。

    关于programming-languages - 编程语言中的空语句是 C、Java、...汇编程序中的无操作吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7240308/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com