Почему включение одинаковых заголовков в несколько файлов cpp и их компиляция работает? [Дубликат]

На этот вопрос уже есть ответ здесь:

Одно правило определения и разные определения классов в двух единицах перевода 1 ответ

Например, у меня есть 2 файла cpp: f1.cpp и f2.cpp, а также заголовочный файл: xxx.h.

f1.cpp имеет следующий исходный код:

#include <iostream>
#include "xxx.h"

using namespace std;

int main ()
{
    rect rplace;
    polar pplace;
    cout<<"Enter the x and y values: ";
    while (cin>>rplace.x>>rplace.y)
    {
        pplace=rect_to_polar(rplace);
        show_polar(pplace);
        cout<<"Next two numbers (q to quit): ";
    }
    cout<<"Done.\n";
    return 0;
}

Исходный код f2.cpp:

#include <iostream>
#include <cmath>
#include "xxx.h"

polar rect_to_polar (rect xypos)
{
    using namespace std;
    polar answer;
    answer.distance=sqrt(xypos.x*xypos.x+xypos.y*xypos.y);
    answer.angle=atan2(xypos.y, xypos.x);
    return answer;
} 

void show_polar (polar dapos)
{
    using namespace std;
    const double Rad_to_deg=57.29577951;
    cout<<"distance="<<dapos.distance;
    cout<<", angle= "<<dapos.angle*Rad_to_deg;
    cout<<"degrees\n";
}

И ххх.ч:

struct polar
{
    double distance;
    double angle;
};

struct rect
{
    double x;
    double y;
};

polar rect_to_polar (rect xypos);
void show_polar(polar dapos);

Я думал, что должна быть ошибка компилятора, потому что заголовкиxxx.h а такжеiostream включены два раза: один раз в f1.cpp и один раз в f2.cpp. Но все было скомпилировано, поэтому я не понимаю, как это может работать.

Ответы на вопрос(1)

Ваш ответ на вопрос