Если я ссылаюсь на функцию с именем sqrt
, как компилятор узнает, какой файл искать, если я его не указал? Это может быть абсолютно любой файл на моем жестком диске.
В отличие от Java, C ++ на самом деле не считает какие-либо файлы «специальными». В Java есть гигантская (раздутая) библиотека классов, которая автоматически становится доступной для программиста.
В C ++ эта концепция не существует. Вы указываете компилятору, в каких путях искать, и всякий раз, когда вы #include файла, он будет искать имя файла в этих путях.
Если это произойдет, чтобы найти стандартный файл библиотеки, он будет использовать это. Если случится найти сторонний файл, он будет его использовать.
Компилятор не знает , что sqrt
определено в заголовке math.h
. Или что также , как правило, определяется в cmath
На самом деле функции, определенные в заголовке, могут варьироваться . Возможно, если я # определю соответствующий символ препроцессора, некоторые функции будут удалены из определенного заголовка, а другие будут включены.
Но в отличие от Java, где функции и классы, определенные библиотекой, могут быть определены только путем изучения метаданных файла библиотеки, в C ++ должен быть скомпилирован заголовок. И результат его компиляции может варьироваться в зависимости от контекста, в который он включен.
Таким образом, компилятор C ++ не может угадать, какой заголовок должен быть включен для определения функции, которую вы только что использовали.