【问题标题】:Does (int i = 0; i < n; i++;) used as a block instead of {int i = 0; i < n; i++;} make any sense at all in C?(int i = 0; i < n; i++;) 是否用作块而不是 {int i = 0;我<n; i++;} 在 C 中是否有意义?
【发布时间】:2013-04-24 15:24:27
【问题描述】:

不知道问这个问题是否真的很愚蠢,因为我觉得它违反了 C 语法。但我不确定。我在几分钟前发布的问题中偶然发现了这一点。OP 使用类似 (int i = 0; i &lt; n; i++) 的东西,即在i++ 之后甚至没有;

Fibonacci Series in C - The series of numbers up to a given number

但是,尽管 OP 的行显然是错误的,但我很想问一些我不知道的问题——以下在 C 中是什么意思:

(int i = 0; i < n; i++;)   // Three `;` terminated statements enclosed in ()

因为以下仅表示 C 中的语句块:

{int i = 0; i < n; i++;}

我的意思是,(int i = 0,n=3; i = n; i++;) 在下面的虚拟程序中是什么意思:

#include<stdio.h>

int main(void)
{
(int i = 0,n=3; i = n; i++;) 
}

编辑即使是源自原始问题的那一行也充满了错误。所以让我独立地问这个问题:如果我们在一对 @ 中包含多个 ; 终止语句会做什么987654330@?如果我们把{}括起来,它就变成了一个块,但是()呢?

【问题讨论】:

  • 这可能意味着前面缺少for
  • 我不得不编辑(int i = 0; i &lt; n; i++;) 部分,因为即使其中也存在大量错误(来自原始问题)
  • @LeeMeador 我在 OP 问题的上下文中看到了。但是在一对 () 中包含 ; 终止语句在 C 中是什么意思?
  • 这还能编译吗?
  • @Goodwine 看看我链接的原始问题中的代码。你会对人性失去信心。

标签: c block parentheses curly-brackets


【解决方案1】:

什么都没有。括号用于某些情况,例如布尔表达式和 for 循环推导。你会得到一堆语法错误。

【讨论】:

    【解决方案2】:

    常见的for循环构造:

    for (int i = 0; i < 10; i++){
       //code here
    }
    

    代码

    {int i = 0; i < 10; i++;}
    

    除了将 i 设置为 0 并将其递增为 1 之外,并没有做太多的事情。 我什至不确定说 i

    【讨论】:

    • i &lt; 10 在条件之外是有效的,但是它返回一个值,并且它必须被分配到某个地方,否则它会给你一个错误。即bool i_less_than_ten = i &lt; 10;
    • @Goodwine 我刚试过。没有那种错误。可能依赖于编译器
    • @Goowind 如果i 大于j,即使这也给出了我预期的printf("%d,%d",i&lt;j,i&gt;j) 的输出1,0。你会如何解释这个Goodwine?
    • @SheerFish 哇,等一下,我说如果你不把它分配到某个地方,它会给你一个错误,在我的例子中,我将它分配给i_less_than_ten,在你的例子中您将其用作参数,属于“分配给某处”
    • 标准完全允许让表达式独立存在,这根本不是错误。任何体面的编译器都会删除它,并警告您您可能犯了一个错误,但它是完全合法的代码,不应该在严格意义上生成 error,在 任何符合的编译器。
    猜你喜欢
    • 1970-01-01
    • 2022-01-07
    • 1970-01-01
    • 2021-06-09
    • 1970-01-01
    • 2022-01-13
    • 1970-01-01
    • 1970-01-01
    • 2019-06-25
    相关资源
    最近更新 更多