user10517877
user10517877

Reputation: 51

Is variable declaration necessary in C?

See the comments to see what is being referred as declaration. If the whole variable declaration part was missing, what would be the problem?

Appears that variable definition and initialization either simultaneously or separately like in the example would suffice.

#include <stdio.h>

// Variable declaration:
extern int a, b;
extern int c;
extern float f;

int main () {

   /* variable definition: */
   int a, b;
   int c;
   float f;

   /* actual initialization */
   a = 10;
   b = 20;

   c = a + b;
   printf("value of c : %d \n", c);

   f = 70.0/3.0;
   printf("value of f : %f \n", f);

   return 0;
}

Upvotes: 4

Views: 530

Answers (4)

klutt
klutt

Reputation: 31449

When it comes to simple variables, there is really no difference between the declaration and definition. There is a difference when it comes to structs and functions. Here is an example:

// Declarations
struct myStruct;
int foo();

int main() 
{
   ...
}

// Definitions
struct myStruct {
    int a, b;
};

int foo() {
    return 42;
}

In your case, you are hiding the previous declarations so that they are not accessible before the end of the scope. This is commonly called shadowing. It's basically the same thing as this:

int main()
{
    int i=0;
    printf("i: %d\n", i);
    {
        int i=42; // Now the previous i is inaccessible within this scope
        printf("i: %d\n", i);
    }
    // And now it is accessible again
    printf("i: %d\n", i);
}

Upvotes: 0

Petar Velev
Petar Velev

Reputation: 2355

There will be no problem here if the mentioned declaration is missing.

// Variable declaration:
extern int a, b;
extern int c;
extern float f;

This tells the compiler that these variables are defined somewhere else(in another file).

/* variable definition: */
int a, b;
int c;
float f;

This is where you define variables but they are not the same as the external variables you declared since they are in the inner scope of the main function.

The scope is the place where variables live. extern keyword notes that the scope is global. You can define variables with the same name in an inner scope and access only them as you did in the main function but it's not a good practice.

void foo()
{
    int a = 5;
    printf("%d\n", a); // 5

    // Creating an inner scope
    {
        int a = 20;
        printf("%d\n", a); // 20
    }
    printf("%d\n", a); // 5
}

The correct way to use the extern keyword with variables is like this.

//h1.h
extern int global_var;  // Declaration of the variable

//c1.c
#include h1.h
int global_var = 0; // Definition of the global var. Memory is allocated here.

//main.c
#include h1.h
int main()
{
    printf("global var value is %d\n", global_var); // use of the var defined and 
                                                    // initialized in c1.c
    return 0;
}

This program will print 0 since the variable is defined and initialized in c1.c.

Upvotes: 2

H.cohen
H.cohen

Reputation: 517

Extern extends the visibility of the C variables and C functions. so that lets the compiler know that there is another place that those vars are declared and memory was allocated for them elsewhere. for example in another c file. if you compile a c file containing a global var for example: int c = 5; and you create a function on you c file that uses this c var, for example:

int someFunc(void){

return c;}

if you run someFunc in your main and print its return value, you will get 5. but you must compile both c files together. in your program, you only use the locally allocated var declared in your main function.

Upvotes: 1

Gaurav
Gaurav

Reputation: 1600

If the declaration was missing then it would create no problem in main function since the locally defined variables i.e. a,b,c,f will be used in the functionality of main till its scope ends.

The declaration merely tells that the definition lies elsewhere (in some other .c file) or the definition lies after the function main in the same .c file.

Upvotes: 3

Related Questions