JScript является реализацией Microsoft Javascript
Когда компилятор собран, он знает несколько стандартных мест для поиска файла заголовка. Некоторые из них не зависят от того, где установлен компилятор (например, / usr / include, / usr / local / include и т. Д.), А некоторые из них зависят от того, где установлен компилятор (что для gcc, контролируется --prefix при запуске configure).
Такие местоположения, как / usr / include, хорошо известны, и "знание" этого местоположения встроено в gcc. Такие местоположения, как / usr / local / include, не считаются полностью стандартными и могут быть установлены, когда gcc собран с параметром configure --with-local-prefix.
Тем не менее, вы можете добавить новые каталоги, где искать включать файлы с помощью параметра командной строки компилятора -I. При попытке включить файл
ОС не знает, где искать эти файлы - это делает компилятор (точнее, препроцессор). У него есть набор путей поиска, в которых он знает, как искать заголовки, так же, как ваша командная оболочка имеет набор мест, где он будет искать программы, которые будут выполняться, когда вы вводите имя. Документация GCC объясняет , как это делает компилятор и как эти пути поиска могут быть изменены.
Расположение файла зависит от системы. В самом деле, файл может быть предварительно скомпилирован , а может даже не существовать - компилятор может иметь его как «встроенный». На своем macbook я вижу, что такой файл есть в / usr / include / c ++ / 4.2.1 / iostream
, но вам не стоит на него полагаться, и это определенно плохая идея , чтобы отредактировать его.
Если бы вы использовали g ++, вы могли бы сделать что-то вроде этого, чтобы узнать, какие включаемые пути искали:
touch empty.cpp
g++ -v empty.cpp
Я не знаю, есть ли эквивалент для Xcode. Может быть, это сработает, поскольку Xcode основан на GCC?
Вам следует избегать # включения файлов с использованием абсолютных путей. Компилятор ищет включаемые файлы в различных каталогах и включает файлы, начиная с каждого каталога. Например;
#include <boost/tokenizer.hpp>
Работает, потому что корневой каталог boost содержит папку с именем 'boost', и эта папка либо находится в вашем пути включения по умолчанию, либо вы сделали что-то подобное.
g++ -I$BOOST_ROOT {blah, blah}
Стандарт C и C ++ использует разделитель UNIX '/ 'будет работать одинаково для всех систем, независимо от того, что хост-система фактически использует для обозначения каталогов. Как уже упоминалось, иногда #include вообще не включает настоящий файл.
In Visual Studio, it's either in the project settings if you use the IDE, or in the %INCLUDE%
environment variable if you use the command line.