How do I share variables between different .c files? [duplicate]
beginner question about C declaration:
In a .c file, how to use variables defined in another .c file?
Solution 1:
In fileA.c:
int myGlobal = 0;
In fileA.h
extern int myGlobal;
In fileB.c:
#include "fileA.h"
myGlobal = 1;
So this is how it works:
- the variable lives in fileA.c
- fileA.h tells the world that it exists, and what its type is (
int
) - fileB.c includes fileA.h so that the compiler knows about myGlobal before fileB.c tries to use it.
Solution 2:
In 99.9% of all cases it is bad program design to share non-constant, global variables between files. There are very few cases when you actually need to do this: they are so rare that I cannot come up with any valid cases. Declarations of hardware registers perhaps.
In most of the cases, you should either use (possibly inlined) setter/getter functions ("public"), static variables at file scope ("private"), or incomplete type implementations ("private") instead.
In those few rare cases when you need to share a variable between files, do like this:
// file.h
extern int my_var;
// file.c
#include "file.h"
int my_var = something;
// main.c
#include "file.h"
use(my_var);
Never put any form of variable definition in a h-file.