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.