Hi all,

I have a C project consisting of five files as follows:


I have defined an array in file file1.h as follows:

static struct prnc keys[MAXP];

the array was populated in file file1.c

Now I need to use the contents of this array again in file file2.c , I don't get a compilation error when i try to print the cotents of the array in file2.c, but at run time I get nothing as if the code is never encountered. So I tried the following two approaches:

1- I changed the definition of the array in file1.h to:

extern struct prnc keys[MAXP];

This time I got a compilation error generated by references to the array in file file1.c, the error message stated that the array is unknown. Why?
so I tried this:

2- I kept the definition in file1.h as:

static struct prnc keys[MAXP];

and added the following line in file2.c:

extern struct prnc keys[MAXP];

the project compiles but at run time the array seems to be empty.

My question is:

The array is populated in file1.c, and I want to reference its contents in


, how can I do that? cause I really don't think that answer is to repopulate it in file2.c! or is it?!

Thanks in advance for your help.

Recommended Answers

All 6 Replies

Lose the static qualifier. extern should be placed on the array in the header file to ensure that it's a declaration. Then include file1.h in both file1.c and file2.c. Make sure that the code to fill the array is called first if you define it in file1.c.

That's exactly what I did the first time and which resulted in the compilation error:
"undefined reference to 'keys' "
where keys is the name of the array.
I'm using bloodshed Dev C++ compiler if it makes any difference.

Ok check this out,

I defined the array in file1.h as:

struct prnc keys[MAXP];

then, I included the following in file2.c:

extern struct prnc keys[MAXP];

and it worked!
Please let me know if you think this is a poor scheme or that I should go about this in another way.
But either way I really appreciate your help, Thank you : )

>Please let me know if you think this is a poor scheme
I think it's a poor scheme, but since it works for you and you can't seem to figure out how to set up your file dependencies properly, go ahead and use it.

But I want to know the proper way if you can kindly tell me,

file1.c has the following header files:

#include "file1.h"

file2.c has the following header files:

#include "file1.h"
#include "file2.h"

But applying the scheme you're suggesting -which is approach #1 in my first post- does not work.

>But I want to know the proper way if you can kindly tell me
I did kindly tell you. Use extern declarations in your header files, provide a single source file for definitions, and the linker will do the rest. You only need a declaration for the code to compile.

Be a part of the DaniWeb community

We're a friendly, industry-focused community of developers, IT pros, digital marketers, and technology enthusiasts meeting, learning, and sharing knowledge.