Preprocessor and Build Boundaries
Include Guards
An include guard makes a header's declarations appear only once in a translation unit.
include guard
An include guard uses `#ifndef`, `#define`, and `#endif` around declarations that should be included once.
Include Guards
include_guards.cpp
Replay: real traced execution (multi-file project)
#include <iostream>
#ifndef SCORE_HELPER_INCLUDED
#define SCORE_HELPER_INCLUDED
int addBonus(int score) {
return score + 5;
}
#endif
int main() {
int score = 12;
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 = 20;
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 = 30;
int finalScore = addBonus(score);
std::cout << "score=" << score << std::endl;
std::cout << "finalScore=" << finalScore << std::endl;
return 0;
}
score ← 12
10int main() {11 int score→ 12 = 12; //@score=20, 301213 int finalScore = addBonus(score12);int addBonus(int score)
4#define SCORE_HELPER_INCLUDED5int addBonus(int score12) {6 return score12 + 5;7}finalScore ← 17
13 int finalScore→ 17 = addBonus(score12);1415 std::cout << "score=" << score12 << std::endl;16 std::cout << "finalScore=" << finalScore17 << std::endl;17 return 0;18}outputscore=12 finalScore=17
score ← 20
10int main() {11 int score→ 20 = 20;1213 int finalScore = addBonus(score20);int addBonus(int score)
4#define SCORE_HELPER_INCLUDED5int addBonus(int score20) {6 return score20 + 5;7}finalScore ← 25
13 int finalScore→ 25 = addBonus(score20);1415 std::cout << "score=" << score20 << std::endl;16 std::cout << "finalScore=" << finalScore25 << std::endl;17 return 0;18}outputscore=20 finalScore=25
score ← 30
10int main() {11 int score→ 30 = 30;1213 int finalScore = addBonus(score30);int addBonus(int score)
4#define SCORE_HELPER_INCLUDED5int addBonus(int score30) {6 return score30 + 5;7}finalScore ← 35
13 int finalScore→ 35 = addBonus(score30);1415 std::cout << "score=" << score30 << std::endl;16 std::cout << "finalScore=" << finalScore35 << std::endl;17 return 0;18}outputscore=30 finalScore=35