Я понимаю, что прекомпилирована заголовки делают с «#include„stdafx.h“и да, я знаю, что их можно отключить. Но это не мой вопрос.Почему Visual Studio C++ требует включения «StdAfx.h» даже в файлы, которые ему не нужны?
Если вы используете скомпилированные заголовки, Visual C++ требует каждый Файл cpp для #include "StdAfx.h", даже файлы, которые не используют какие-либо заголовки в StdAfx.h. Если вы забыли включить StdAfx.h в один файл, это ошибка. Но почему? Очевидным подходом было бы просто «Если вы включите StdAfx.h, то этот файл будет использовать его, но если вы забудете включить его, то эти заголовочные файлы просто не будут включены». Я не понимаю, почему VC++ потребует от вас включая StdAfx.h, когда это не нужно. Похоже, им было бы легче рассматривать его как обычный файл заголовка.
Есть ли веская причина, почему это требуется?
Весь смысл предварительно скомпилированных заголовков заключается в сокращении времени компиляции. Если какие-либо дополнительные проверки будут выполнены, это увеличит время компиляции, оказывая единственное преимущество предварительно скомпилированных заголовков - бесполезно. –
Почему вы так говорите? Нет необходимости в дополнительной проверке - VC++ может просто сделать «если первая строка - #include» stdafx.h ", тогда скопируйте эти символы там, но в противном случае ничего не сделайте". Похоже, Microsoft было бы проще сделать это таким образом и более очевидным для пользователей. – user2543623
Фактически, * не * требуется «StdAfx.h» для каждого файла, фактически улучшит время компиляции, так как тогда им не нужно будет копировать эти прекомпилированные символы в файлы .cpp, которые им не нужны. – user2543623