Я рассмотрел вопросы Как правильно использовать директиву include и C ++ #include семантику , и ни один из них не затрагивает это, равно как и другие, предложенные SO, когда я набрал заголовок. .
Каковы преимущества написания:
#include "../include/someheader.h"
#include "../otherdir/another.h"
по сравнению с использованием простого имени файла:
#include "someheader.h"
#include "another.h"
или, возможно, относительное имя без '..
':
#include "include/someheader.h"
#include "otherdir/another.h"
Проблемы, которые я вижу:
- Нельзя перемещать заголовок, не беспокоясь о том, какие исходные файлы включают его.
- Вы можете получить очень длинные пути для заголовков в зависимостях и отчетах об ошибках. У меня был один сегодня с "
../dir1/include/../../include/../dir2/../include/header.h
".
Единственное достоинство, которое я вижу, это то, что, хотя вам не нужно перемещать файлы, вы можете уйти, не всегда используя директивы -I
для поиска заголовков, но потерю гибкости и сложности. компиляция в подкаталогах и т. д., кажется, перевешивает выгоду.
Итак, я упускаю выгоду?
Спасибо за вклад. Я думаю, что консенсус заключается в том, что в нотации, использующей «...», нет никаких существенных преимуществ, которые я пропускаю. В общих чертах мне нравится нотация "where / header.h "; Я использую это в новых проектах. Тот, над которым я работаю, совсем не новый.
Одна из проблем заключается в том, что существуют различные наборы заголовков, часто с префиксом, таким как rspqr.h
, rsabc.h
, rsdef.h
, rsxyz.h
. Все они связаны с кодом в каталоге rsmp
, но некоторые заголовки находятся в rsmp
, а другие находятся в центральном каталоге include, в котором нет подкаталогов, таких как rsmp
. (И повторите для различных других областей кода; в разных местах есть заголовки, которые нужны случайным образом для других фрагментов кода.) Перемещение содержимого является серьезной проблемой, потому что код стал настолько запутанным за эти годы. И make-файлы не совместимы, в которых предоставляются опции -I
. В целом, это печальная история не столь мягкого пренебрежения в течение десятилетий. Исправить все без поломок будет долгой и утомительной работой.