Quais são os benefícios de um caminho relativo, como "../include/header.h" para um cabeçalho?
Revi as perguntasComo usar a diretiva include corretamente e C ++ #include semântica e nem aborda isso - nem os outros sugeridos por SO quando digitei o título ...
Quais são, se houver, os benefícios de escrever:
#include "../include/someheader.h"
#include "../otherdir/another.h"
comparado com o uso de apenas um nome de arquivo simples:
#include "someheader.h"
#include "another.h"
ou talvez um nome relativo sem o '..
':
#include "include/someheader.h"
#include "otherdir/another.h"
Os problemas que vejo são:
Você não pode mover um cabeçalho sem se preocupar com os arquivos de origem que o inclue Você pode acabar com caminhos muito longos para cabeçalhos em dependências e relatórios de erros. Eu tive um hoje com "../dir1/include/../../include/../dir2/../include/header.h
". O único mérito que vejo é que, embora você não precise mover arquivos, talvez seja possível fugir sem sempre usar '-I
'diretivas para encontrar cabeçalhos, mas a perda de flexibilidade e a complexidade de compilar em subdiretórios subdiretórios etc. parece compensar o benefíci
Então, estou com vista para um benefício?
Obrigado pelas entradas. Eu acho que o consenso é que não há grandes benefícios para a notação usando ".." que estou ignorando. Em termos gerais, gosto da notação "algures / header.h"; Eu o uso em novos projetos. O que eu estou trabalhando é tudo menos novo.
Um dos problemas é que existem vários conjuntos de cabeçalhos, geralmente com um prefixo comorspqr.h
, rsabc.h
, rsdef.h
, rsxyz.h
. Tudo isso está relacionado ao código norsmp
, mas alguns dos cabeçalhos estão norsmp
e outros estão no diretório include central, que não possui subdiretórios comorsmp
nisso. (E repita para as várias outras áreas do código; existem cabeçalhos em vários locais, necessários aleatoriamente por outros bits do código.) Mover coisas é um grande problema, porque o código ficou tão complicado ao longo dos anos. E os makefiles não são consistentes nos quais-I
opções são fornecidas. Em suma, é uma triste história de negligência não tão benigna ao longo de um período de décadas. Consertar tudo sem quebrar nada será um trabalho longo e tedios