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

score
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;
}
  1. score ← 12

    10int main() {11    int score→ 12 = 12; //@score=20, 301213    int finalScore = addBonus(score12);
  2. int addBonus(int score)

    4#define SCORE_HELPER_INCLUDED5int addBonus(int score12) {6    return score12 + 5;7}
  3. 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
  1. score ← 20

    10int main() {11    int score→ 20 = 20;1213    int finalScore = addBonus(score20);
  2. int addBonus(int score)

    4#define SCORE_HELPER_INCLUDED5int addBonus(int score20) {6    return score20 + 5;7}
  3. 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
  1. score ← 30

    10int main() {11    int score→ 30 = 30;1213    int finalScore = addBonus(score30);
  2. int addBonus(int score)

    4#define SCORE_HELPER_INCLUDED5int addBonus(int score30) {6    return score30 + 5;7}
  3. 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