To share variables between source files in C/C++ using the extern keyword, follow these steps:
Step-by-Step Guide
- Define the Variable in One Source File
Declare and initialize the variable once in a single.cor.cppfile (withoutextern). This allocates memory for the variable.
// file1.c
int sharedVar = 42; // Definition (allocates memory)
- Declare the Variable as
externin a Header File
Useexternin a header file to indicate the variable exists elsewhere. This is a declaration, not a definition.
// shared.h
#ifndef SHARED_H
#define SHARED_H
extern int sharedVar; // Declaration (no memory allocated)
#endif
- Include the Header in Other Files
Include the header in any file needing access to the shared variable.
// file2.c
#include "shared.h"
#include <stdio.h>
void printVar() {
printf("sharedVar = %d\n", sharedVar); // Uses sharedVar from file1.c
}
- Compile and Link All Files
Ensure all source files are compiled and linked together.
gcc file1.c file2.c main.c -o program
Key Rules
- One Definition Rule (ODR): The variable must be defined exactly once in one source file.
- Declaration vs. Definition:
- Use
externin headers for declarations (promises the variable exists elsewhere). - Omit
externin the source file for the definition (allocates memory).
C++ Specifics
- For
constVariables:
In C++,constvariables have internal linkage by default. To share them:
// shared.hpp
extern const int sharedConst; // Declaration
// file1.cpp
extern const int sharedConst = 100; // Definition (requires 'extern')
- Namespaces:
Declare and define variables in namespaces properly:
// shared.hpp
namespace Shared {
extern int sharedVar;
}
// file1.cpp
namespace Shared {
int sharedVar = 42; // Definition
}
Example Structure
project/
├── shared.h // extern declarations
├── file1.c // variable definition
├── file2.c // uses the variable
└── main.c // main program
Common Pitfalls
- Multiple Definitions: Defining the variable in multiple files causes linker errors.
- Missing
externin Headers: Leads to separate variables in each file (violates ODR). - Forgetting to Link Files: Results in “undefined reference” errors.
Testing the Example
file1.c
#include "shared.h"
int sharedVar = 42; // Definition
file2.c
#include "shared.h"
#include <stdio.h>
void printVar() {
printf("sharedVar = %d\n", sharedVar);
}
main.c
#include "shared.h"
#include <stdio.h>
void printVar(); // Function declaration
int main() {
printf("sharedVar in main: %d\n", sharedVar);
printVar();
return 0;
}
Compile and Run
gcc file1.c file2.c main.c -o program && ./program
Output
sharedVar in main: 42
sharedVar = 42
Conclusion
The extern keyword enables safe sharing of variables across files by separating declaration (headers) and definition (one source file). Adhere to the One Definition Rule and proper linkage to avoid errors.