C 中的 for 循环问题

Issue with for loop in C

我正在创建一个 int 数组并将其所有元素 0 放入 C

使用:

int arr[50],i;
for(i=0;i<50;i++){
    arr[i]=0;
}

如果在函数内部或 main() 中使用,效果很好,例如:

int main(){
    int arr[50],i;
    for(i=0;i<50;i++){
        arr[i]=0;
    }
    return 0;
}

但是如果我们在任何函数之外使用代码,就会发生一些奇怪的事情,例如:

#include <stdio.h>
int arr[50],i;
for(i=0;i<50;i++){
    arr[i]=0;
}
int main()
{
     printf("Hello World!");
     return 0;
} 

编译时出现错误:

error: expected identifier or '(' before 'for'    
 for(i=0;i<50;i++){                                           
 ^  

这么说来,C的语法是不是不支持函数外循环?

如果不是,那为什么会这样?

你正在定义一个 anonymous 块,这是不允许的(它需要在函数定义之前,否则,编译器永远不知道什么时候它必须执行它)。

在 C 语言中,除变量 declaration/initialization 之外的每一行代码都必须位于函数中。

可能出现在翻译单元顶层的只有声明或函数定义。

要在 C 中执行循环,它必须在函数内部。否则编译器将不知道何时执行这段代码。在这种情况下,大多数 C 编译器都会给出编译错误。只有变量 initialisations/declarations 可以出现在函数外部

#include <stdio.h>
int arr[50],i;
/* This piece will not get executed
    for(i=0;i<50;i++){
      arr[i]=0;
    }
*/
int main()
{
     printf("Hello World!");
     return 0;
} 

这与循环无关。所有的语句都必须放在函数里面,否则...告诉我,你认为什么时候函数外面的代码必须是运行?不知道?还有编译器

您可以通过将数组的第一个元素初始化为零来将其初始化为 0。

int arr[50]={0};

您在这里遇到的是 编程范式 的混乱。如果我没记错的话(我可能是!只是猜测...)您熟悉 python 编程,它是用命令式范式编写的。这意味着在一个文件中,每一行都是自上而下逐行读取和执行的。在这样的范例中,您提出的 函数之外的代码 将运行良好。

由于您是用 C 语言编写的,所以您是在 过程范式 (或最终范式)中编写的。这意味着代码块将在过程(函数)中定义,并且可以在过程之间引用。调用一个过程启动程序,在 C 编程中,这个过程是 main() 过程,通过名称识别。在过程之外编写的任何代码在语法上都是不正确的(我相信有些例外,宏等......)。

由于正确的语法是 C(以及所有其他过程编程语言)程序编译的首要要求,因此在尝试编译和 运行 这段代码时会发生错误。

我希望这有助于加深理解!范式很有趣,它们是使用某种语言的规则