Что-то происходит по-разному в компиляторе между этими двумя способами включения одинаковых заголовков? - PullRequest
1 голос
/ 12 мая 2011

делает:

#include <vector>
#include <string>
#include <winsock2.h>  
#include <iphlpapi.h>
#include "FileX.h" <--------------which #include <windows.h>

Компилировать так же, как в одном заголовочном файле:

#include <vector>
#include <string>
#include <winsock2.h>  
#include <iphlpapi.h>
#include <windows.h>

В первом случае windows.h - это другой файл (все еще включенный в последний).

Что-то происходит по-разному в компиляторе между этими двумя способами включения одинаковых заголовков?

Ответы [ 3 ]

2 голосов
/ 12 мая 2011

В моем мире, «FileX.h» определяется следующим образом

#error "This is different from windows.h, as it contains an #error!"
#include <windows.h>

Так что да, в этом случае "что-то происходит в компиляторе"?

Даже если это просто определить следующим образом, вещи могут отличаться

#include <windows.h>

Если вы включите слишком много заголовков, вы можете достичь лимита ресурсов компилятора раньше, чем если бы вы включили <windows.h> напрямую, и это может привести к различным путям, которые могут привести к различным ошибкам в вашем компиляторе и т. Д. *

Так что это действительно зависит от того, что вы имеете в виду под словом «что-то другое в компиляторе».

2 голосов
/ 12 мая 2011

Если FileX.h не делает что-то странное (например, #ifdef с или #pragma с) перед тем, как он #include <windows.h>, то они должны быть идентичны.

1 голос
/ 12 мая 2011

Это зависит от того, какой компилятор вы используете. Обычно вариант "" начинает искать заголовок в каталоге файла, включающего его. Включение <> идет непосредственно в системные заголовки.

Стандарт языка просто говорит, что он определяется реализацией.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...