В MSVC ++ файлы #include ищутся по-разному в зависимости от того, заключен ли файл в "" или <>. Форма в кавычках ищет сначала в локальной папке, а затем в / I указанных местах. Форма угловых скобок позволяет избежать локальной папки.
Это означает, что в MSVC ++ возможно иметь заголовочные файлы с тем же именем, что и у заголовков времени выполнения и SDK.
Так, например, мне нужно обернуть файл windows sdk windows.h, чтобы определить некоторые макросы, которые вызывают проблемы. С помощью MSVS я могу просто добавить (необязательно) файл windows.h в свой проект, если я включаю его с помощью формы в кавычках: -
// some .cpp file
#include "windows.h" // will include my local windows.h file
И в моем windows.h я могу вытащить настоящий, используя форму угловых скобок:
// my windows.h
#include <windows.h> // will load the real one
#undef ConflictingSymbol
Попытка этого трюка с GCC в XCode не сработала. угловая скобка #include в системных заголовочных файлах фактически находит мои заголовочные файлы с похожими именами в структуре моей локальной папки.
Система MSVC означает, что вполне безопасно иметь заголовочный файл «String.h» в моей собственной структуре папок. На XCode это, кажется, основной номер нет.
Есть ли какой-нибудь способ управления этим поведением пути поиска в XCode, чтобы он больше походил на MSVC? Или мне просто нужно избегать именовать какие-либо заголовки, которые могут конфликтовать с системным заголовком. Написание кроссплатформенного кода и использование множества сред означает, что вероятность случайных конфликтов кажется большой.