C语言中的for循环问题

时间:2015-01-07 07:02:23

标签: 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的语法是否不支持函数外的循环?

如果不是,那为什么会发生这种情况?

5 个答案:

答案 0 :(得分:9)

您正在定义匿名块,这是不允许的(它需要由函数定义预先设置,否则,编译器将永远不知道何时必须执行它)

在C中,每行代码但变量声明/初始化必须位于函数内。

可能出现在翻译单元顶层的唯一内容是声明或函数定义。

答案 1 :(得分:2)

你有什么是编程范式的混乱。如果我没有弄错(我可能是!只是猜测......)你熟悉python编程,这是用命令式范式编写的。这意味着在文件中,每行读取并自上而下逐行执行。在这样的范例中,您在函数之外提出的代码可以正常运行。

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

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

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

答案 2 :(得分:1)

为了在C中执行循环,它必须在函数内部。否则编译器将不知道何时执行这段代码。在这种情况下,大多数C编译器都会给出编译器错误。只有变量初始化/声明才能出现在函数

之外
#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;
} 

答案 3 :(得分:1)

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

答案 4 :(得分:1)

只需将第一个元素初始化为零来定义数组,就可以将数组初始化为0。

int arr[50]={0};