Компилятор C и C++ включает порядок и относительные пути.C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Компилятор C и C++ включает порядок и относительные пути.

Сообщение Anonymous »

Я провел тест со следующей структурой папок:

Код: Выделить всё

MainFolder
main.cpp
LibraryFile.h
Files
LibraryFile.h
Library1Name
MainHeader.h
LibraryFile.h
Files
LibraryFile.h
Library2Name
MainHeader.h
LibraryFile.h
Files
LibraryFile.h
Предположим, что папка MainFolder (корневая) находится в путях включения и ничего больше.
Теперь в main.cpp< /code>, да:

Код: Выделить всё

#include "Library1Name/MainHeader.h"
Оба файла MainHeader.h из Library1 и Library2 включают:

Код: Выделить всё

#include "LibraryFile.h"
#include "Files/LibraryFile.h"
Смысл здесь в том, чтобы создать ТОЧНО одинаковую структуру и имена папок для всех трех версий:

Код: Выделить всё

The Library1 version
The Library2 version
The Root Folder version
Насколько я вижу, теперь существует потенциальный конфликт между ссылкой на эти файлы в библиотеке 1 или, поскольку основная корневая папка находится в путях включения, ссылается на корневую версию.
Вопрос 1: определен ли здесь порядок?
В моей системе он выбирает тот, который находится внутри библиотеки 1. Итак, конфликта не было. Однако давайте просто скажем, что конфликт ЕСТЬ, поскольку я полагаю, что он был у меня ранее. Каков будет эффект от добавления "./" в качестве пути включения?
Для например, в main.cpp:

Код: Выделить всё

#include "Library1Name/MainHeader.h"
И затем в Library1 MainHeader:

Код: Выделить всё

#include "./LibraryFile.h"
#include "./Files/LibraryFile.h"
Из моего теста, когда возник конфликт (хотя я больше не могу его воспроизвести), добавление "./" разрешило конфликт.
Моя теория заключается в том, что если вы сделаете это, компилятор не сможет выбрать версию корневой папки, поскольку вы указали "./", что конкретно означает относительно того самого файла, в котором вы написал это. Для пояснения: «./» не означает путь к папке ПОСЛЕ включения в файл .cpp, что будет означать «РАСПОЛОЖЕНИЕ ФАЙЛА CPP». Скорее, это ВСЕГДА относится к «РАСПОЛОЖЕНИЮ ФАЙЛА, В КОТОРОМ «./» БЫЛО НАПИСАНО. Это файл заголовка.
Вопрос 2: Есть ли «./» всегда так делаете?
Кроме того, учтите, что мы добавляем путь «MainFolder/Library2Name» к пути включения. Это означало бы, что мы вносим ДРУГОЙ конфликт, но, как я уже говорил ранее, указание "./" устраняет все конфликты.
Насколько я прав?
Также есть есть различия между #include "" и #include , но поскольку это действительно сложно, давайте забудем и сосредоточимся на тесте "". здесь.

Подробнее здесь: https://stackoverflow.com/questions/791 ... tive-paths
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»