Koi Koi - 2 months ago 16
C Question

Including header files in multiple source files in C

Consider the following example:
Header.h:

typedef struct
{
int value;
}My_Struct;

void edit(int num);
int get();


Header.c

My_Struct data={0};

void edit(int num)
{
data.value = num;
}
int get()
{
Return data.value;
}


If two files file1.c and file2.c both include header.h and file1.c calls the edit function to change value to 99, will a get function called from file2.c return 99 or the initialised 0?

Im hoping it will return 0 and each file has its own copy of My_Struct.

Answer

Assuming file1.c and file2.c are linked into a single executable along with header.c, they will be referencing the same variable. So if you call edit with a value of 99 from a function in file1.c, a subsequent call to get from a function in file2.c will return 99.

The only way you could get different results is if you were to pass an instance of My_Struct to these functions, so each calling function could use a different instance.

If on the other hand file1.c and file2.c are each linked into separate executables, then each one (each running instance, actually) will have its own copy of data.