Как #include'ы писать надобно
От: b0r3d0m  
Дата: 28.04.17 03:40
Оценка:
эй ниггаз.

Поспорили тут с коллегой на тему того, как #include'ы в C++ писать надобно. Речь пойдёт о VS.

Итак, имеются следующие варианты подключаемых файлов:
1. Файлы, являющиеся частью того же самого проекта.
2. Файлы, являющиеся частью другого проекта в том же solution'е.
3. файлы, являющиеся частью стандартной библиотеки C++.
4. файлы, являющиеся частью каких-либо third-party libraries (WinAPI, boost etc).

Я считаю расово верным следующий вариант:
Если путь до подключаемого файла указан в Additional Include Directories / системных путях / IDE, или если он является частью стандартной библиотеки языка, то должны использоваться angle brackets, т.е. #include <smth>.
В противном случае должны использоваться double quotes, т.е. #include "smth".

Таким образом, получаем:
1. ""
2. <> (ссылаемся на этот самый другой проект через Additional Include Directories)
3. <>
4. <> (ссылаемся на эти самые third-party libraries через Additional Include Directories)

По стандарту, по сути, оба варианта resolve'ятся в implementation-defined manner, но раз мы говорим про VS, то и смотреть надо в MSDN, а там сказано следующее:

Quoted form The preprocessor searches for include files in this order:
1) In the same directory as the file that contains the #include statement.
2) In the directories of the currently opened include files, in the reverse order in which they were opened. The search begins in the directory of the parent include file and continues upward through the directories of any grandparent include files.
3) Along the path that's specified by each /I compiler option.
4) Along the paths that are specified by the INCLUDE environment variable.

Angle-bracket form The preprocessor searches for include files in this order:
1) Along the path that's specified by each /I compiler option.
2) When compiling occurs on the command line, along the paths that are specified by the INCLUDE environment variable.


, что только подкрепляет высказанное мной предложение (ведь лучше идти навстречу компилятору, верно?).

Что скажете? Дискасс.
Re: Как #include'ы писать надобно
От: Marty Пират https://www.youtube.com/channel/UChp5PpQ6T4-93HbNF-8vSYg
Дата: 28.04.17 04:18
Оценка:
Здравствуйте, b0r3d0m, Вы писали:


B>Что скажете? Дискасс.


А чего тут спорить? Я так же делаю.
Маньяк Робокряк колесит по городу
Re[2]: Как #include'ы писать надобно
От: b0r3d0m  
Дата: 28.04.17 04:22
Оценка:
M>А чего тут спорить? Я так же делаю.
Коллега настаивает на том, что при помощи angle brackets следует включать только те заголовочные файлы, которые являются частью стандартной библиотеки языка. Типа "boost / any other third-party library" -- это всё несистемное, а значит должно быть помещено в двойные кавычки.
Мне-то вообще, строго говоря, всё равно, но такого стиля я ещё ни разу не видел, вот и удивился.
Re[3]: Как #include'ы писать надобно
От: Marty Пират https://www.youtube.com/channel/UChp5PpQ6T4-93HbNF-8vSYg
Дата: 28.04.17 04:31
Оценка: +1
Здравствуйте, b0r3d0m, Вы писали:

M>>А чего тут спорить? Я так же делаю.

B>Коллега настаивает на том, что при помощи angle brackets следует включать только те заголовочные файлы, которые являются частью стандартной библиотеки языка. Типа "boost / any other third-party library" -- это всё несистемное, а значит должно быть помещено в двойные кавычки.
B>Мне-то вообще, строго говоря, всё равно, но такого стиля я ещё ни разу не видел, вот и удивился.

Имхо он не прав. То, что в include путях — по угловым скобкам включается. Системное или нет — не важно. Тут вообще говоря, от него надо потребовать точного определения, что такое системное. Желательно с примерами под линукс.

По обычным скобкам — включается свое из текущего/смежного проекта, с точным указанием пути (относительного) до включаемого файла. Если своё выносится в библиотеки и отделяется от проекта, и может мигрировать по файловой системе — то тогда тоже через угловые скобки и с указанием include пути.
Маньяк Робокряк колесит по городу
Re: Как #include'ы писать надобно
От: vdimas Россия  
Дата: 10.05.17 21:00
Оценка:
Здравствуйте, b0r3d0m, Вы писали:

B>Поспорили тут с коллегой на тему того, как #include'ы в C++ писать надобно. Речь пойдёт о VS.


Ты написал правильный ответ, чего тут обсуждать?


B>Quoted form The preprocessor searches for include files in this order:

B>1) In the same directory as the file that contains the #include statement.

B>Angle-bracket form The preprocessor searches for include files in this order:

B>1) Along the path that's specified by each /I compiler option.

B>, что только подкрепляет высказанное мной предложение (ведь лучше идти навстречу компилятору, верно?).

B>Что скажете? Дискасс.

В двойных кавычках принято указывать относительный путь от файла, в котором происходит include.
В угловых — относительный путь от поданных "внешних" зависимостей.
Re: Как #include'ы писать надобно
От: Dair Россия https://dair.spb.ru
Дата: 10.05.17 21:21
Оценка: +2
Здравствуйте, b0r3d0m, Вы писали:

B>Поспорили тут с коллегой на тему того, как #include'ы в C++ писать надобно. Речь пойдёт о VS.


Я делаю так:

B>Итак, имеются следующие варианты подключаемых файлов:

B>1. Файлы, являющиеся частью того же самого проекта.
""

B>2. Файлы, являющиеся частью другого проекта в том же solution'е.

""

B>3. файлы, являющиеся частью стандартной библиотеки C++.

<>

B>4. файлы, являющиеся частью каких-либо third-party libraries (WinAPI, boost etc).

<>


Принцип — что "моё" — то в двойных кавычках. Что "я" не редактирую — в угловых скобках.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.