Initialization of global and static variables in C

2

Predict the output of following C programs.

// PROGRAM 1
#include <stdio.h>
#include <stdlib.h>

int main(void)
{
   static int *p = (int*)malloc(sizeof(p));
   *p = 10;
   printf("%d", *p);
}
// PROGRAM 2
#include <stdio.h>
#include <stdlib.h>
int *p = (int*)malloc(sizeof(p));

int main(void)
{
    *p = 10;
    printf("%d", *p);
}

Both of the above programs don’t compile in C. We get the following compiler error in C.

error: initializer element is not constant

In C, static and global variables are initialized by the compiler itself. Therefore, they must be initialized with a constant value.

Note that the above programs compile and run fine in C++, and produce the output as 10.

As an exercise, predict the output of following program in both C and C++.

#include <stdio.h>
int fun(int x)
{
    return (x+5);
}

int y = fun(20);

int main()
{
    printf("%d ", y);
}

This article is contributed by Shankar Shastri. Please write comments if you find anything incorrect, or you want to share more information about the topic discussed above.

GATE CS Corner    Company Wise Coding Practice

Please write to us at contribute@geeksforgeeks.org to report any issue with the above content.

Recommended Posts:



2 Average Difficulty : 2/5.0
Based on 1 vote(s)










Writing code in comment? Please use ide.geeksforgeeks.org, generate link and share the link here.