Preprocessor and Build Boundaries
Include Guards
An include guard makes a header's declarations appear only once in a translation unit.
Include Guards
include_guards.cpp
#include <iostream>
#ifndef SCORE_HELPER_INCLUDED
#define SCORE_HELPER_INCLUDED
int addBonus(int score) {
return score + 5;
}
#endif
int main() {
int score = ;
int finalScore = addBonus(score);
std::cout << "score=" << score << std::endl;
std::cout << "finalScore=" << finalScore << std::endl;
return 0;
}
#include <iostream>
#ifndef SCORE_HELPER_INCLUDED
#define SCORE_HELPER_INCLUDED
int addBonus(int score) {
return score + 5;
}
#endif
int main() {
int score = ;
int finalScore = addBonus(score);
std::cout << "score=" << score << std::endl;
std::cout << "finalScore=" << finalScore << std::endl;
return 0;
}
#include <iostream>
#ifndef SCORE_HELPER_INCLUDED
#define SCORE_HELPER_INCLUDED
int addBonus(int score) {
return score + 5;
}
#endif
int main() {
int score = ;
int finalScore = addBonus(score);
std::cout << "score=" << score << std::endl;
std::cout << "finalScore=" << finalScore << std::endl;
return 0;
}
include guard
An include guard uses `#ifndef`, `#define`, and `#endif` around declarations that should be included once.