Помните, что ЛЮБОЙ другой файл в процессе сборки может содержать заголовок.При типичном include guard: #ifndef MYHEADER \n #include MYHEADER
код заголовка вставляется только в первом экземпляре.После этого компилятор съел его и запомнил, и больше не нужно его включать.Думайте о компиляции, как о ВСЕХ исходных кодах в одном файле и превращении их в двоичный(Вы знаете, «компилирование», как сложение в кучу).Так что это не «в тот же файл», это «в той же сборке».
Вы хотите, чтобы заголовочный файл был взаимоисключающим с другим заголовочным файлом.(Например, если у вас есть код, предназначенный для конкретного аппаратного обеспечения посредством включений, и вы, очевидно, не можете использовать два чипа одновременно.) Прежде всего, если это проблема, у вас действительно должно быть одно место, гдетакие вещи определены (как сценарий сборки), так что это не проблема.Но если вам нужна простая защита:
#ifndef PPC_e6500
#define PPC_e6500
#ifdef LINUX
#error This processor ain't big enough for the both of us, Tux. This here's 8548 territory!
#endif
Это не удастся построить, и вы сможете выяснить, кто совершил любую ужасную вещь, которая пыталась нацелить на две цели одновременно.