Способ, которым MSVC реализует предварительно скомпилированные заголовки, заключается в том, что компилятор игнорирует все, вплоть до строки, которая вводит предварительно скомпилированный заголовок, и начинает там с нуля.Поэтому, когда вы компилируете свою программу, она не «запоминает» строку #ifdef
, поэтому строка #endif
не имеет для нее никакого смысла.
Дело в том, что в этом нет ничего «MS»1005 *, за пределами своеобразной схемы именования [которую вы можете изменить в любом случае].Так зачем вообще блокировать включение в Borland?В худшем случае, вы перемещаете блок _MSC_VER
в заголовок, и вы попадаете в ту же ситуацию, в которой находитесь сейчас, за исключением того, что есть один потраченный впустую файл включения.Или вы позволяете вашей системе сборки перенаправить #include
в специфичный для Borland файл stdafx.h
.