Vedant Terkar
Vedant Terkar

Reputation: 4682

Issue with for loop in C

I was creating an int array and making all of its element 0 in C.

Using:

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

Which works fine if used inside a function or in main() like:

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

But something strange happens if we use the code outside of any function like:

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

Gives error on compilation:

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

So by that, is it that grammar of C doesn't support looping outside of a function?

If no, then why is this happening?

Upvotes: 0

Views: 91

Answers (5)

Jasen
Jasen

Reputation: 12442

You can initialize an array to 0 by just defining it with the first element initialized to zero.

int arr[50]={0};

Upvotes: 1

Freestyle076
Freestyle076

Reputation: 1556

What you have here is confusion in programming paradigm. If I'm not mistaken (I may be! Just a guess...) you are familiar with python programming, which is written in an imperative paradigm. This means that within a file each line is read and performed top down, one by one. In such a paradigm your proposed code outside of a function would operate just fine.

Since you are writing in the C language you are writing in a procedural paradigm (or definitive paradigm). This means that code blocks are to be defined in procedures (functions) and can be referenced procedure to procedure. Calling one procedure launches the program, in C programming this one procedure is the main() procedure, recognized by name. Any code written outside of a procedure is syntactically incorrect (some exceptions I believe, macros and the like...).

Since correct syntax is the first requirement of program compilation in C (and all other procedural programming languages) the error occurs when attempting to compile and run this code.

I do hope this helps with a greater understanding! Paradigms are fun, they are the rules of using a certain language.

Upvotes: 2

Andrey Chernukha
Andrey Chernukha

Reputation: 21828

It has nothing to do with looping in particular. All the statements must be put inside functions, otherwise... tell me, when do you think the code outside a function must be run? Have no idea? And the compiler too

Upvotes: 1

Sadique
Sadique

Reputation: 22851

You're defining an anonymous block, which is not allowed (it needs to be predeceded by a function definition, otherwise, the compiler will never know when it will have to execute it).

In C, every line of code but variable declaration/initialization must lie within a function.

The only things that may appear at the top level of a translation unit are declarations or function definitions.

Upvotes: 9

Seema Kadavan
Seema Kadavan

Reputation: 2648

For executing a loop in C, it has to be inside a function. Otherwise compiler will not have any idea when to execute this piece of code. Most of the C compilers will give a compiler error in this case. Only variable initialisations/declarations can appear outside of a function

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

Upvotes: 1

Related Questions