1 #include<stdio.h>
2 #include<malloc.h>
3
4 typedef struct node_t{
5 int i;
6 struct node_t* link;
7 }node;
8
9 node* head = (node *)malloc(sizeof(node));
10
11 if(head == NULL){
12 printf("\n malloc for head node failed! \n");
13 }
14
15 int main(){
16 int i = 10;
17 node* temp = NULL;
18 temp = (node *)malloc(sizeof(node));
19 if(temp == NULL){
20 printf("\n malloc for temp node failed! \n");
21 }
22 else{
23 while(i<=10){
24 ;
25 }
26 }
27 return 0;
28 }
compilation error:
linked.c:9:1: error: initializer element is not constant
linked.c:11:1: error: expected identifier or ‘(’ before ‘if’
I'm trying a simple linked list programme. It's not fully completed. I'm getting a compilation error. Couldn't understand why this happened.
Since you're defining
head
as a global, its initializer needs to be a constant--basically, the compiler/linker should be able to allocate space for it in the executable, write the initializer into the space, and be done. There's no provision for callingmalloc
as you've done above during initialization--you'll need to do that inside ofmain
(or something you call frommain
).In this case, the code you have in
main
never actually useshead
though, so you may be able to skip all of the above without a problem.head
is a global varibale. Global and static varibales must be initialized by constant expressions, i.e. literals. so you can't doThese lines are not possible outside the
main()
because any function call or executable should be inside themain()
function or any function called from main.For
linked.c:9:1: error: initializer element is not constant
Only function definitions or any global initialization is possible outside
main()
but initializer must be constant expression`.You can declare the
head
as global but initialization is wrong.Do it like this :
For
linked.c:11:1: error: expected identifier
,if
statement cannot be outside any function. In your case , put these lines inside main and problem solvedYou can't use malloc() in global scope. or you can do like follow