#include - скобки против кавычек в XCode? - PullRequest
4 голосов
/ 11 мая 2010

В 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? Или мне просто нужно избегать именовать какие-либо заголовки, которые могут конфликтовать с системным заголовком. Написание кроссплатформенного кода и использование множества сред означает, что вероятность случайных конфликтов кажется большой.

Ответы [ 4 ]

4 голосов
/ 11 мая 2010

Вы должны быть в состоянии сделать то же самое с gcc (я не знаю, сколько xcode оборачивает вещи и препятствует доступу к некоторым функциям). Существует множество параметров, управляющих путем поиска (см. http://gcc.gnu.org/onlinedocs/gcc-4.5.0/cpp/Search-Path.html и http://gcc.gnu.org/onlinedocs/gcc-4.5.0/cpp/Invocation.html и ищите -iquote). Вызов gcc с ключом -v даст вам путь, указывающий, где они различаются.

0 голосов
/ 11 мая 2010

Обратите внимание, что gcc поддерживает -iquote и -isystem в дополнение к -I, чтобы дать вам больший контроль над тем, какие каталоги будут искать # include.

0 голосов
/ 11 мая 2010

Я не уверен, правильно ли я понимаю ваш вопрос

Избегать проблем с именами всегда лучше. «<>» в большей степени зависит от компилятора, а «« »(lol) более специфично для проекта.

например, при использовании вашего компилятора заглянет в его папки компилятора (системы), а при использовании "windows.h" он будет смотреть в ваших папках проекта

если включаемый файл "windows.h" не работает, проверьте ваш make-файл или настройки проекта

0 голосов
/ 11 мая 2010

Вы можете попробовать #include "./windows.h". Компилятор должен быть достаточно умен, чтобы сначала разрешить это в локальном каталоге.

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