Dylemat z plikami nagłówkowymi

0

Dzień dobry w skrócie proszę o pomoc w sprawie plików nagłówkowych gdyż mieszają w głowie :)

Jak dodać pliki które są w folderze tak żeby były dostępne w Source.cpp

Source.cpp (main())
folder/header.h
folder/body.cpp

#include "header.h"
#include <header.h>
#include "folder/header.h"
#include <folder/header.h>

Pozdrawiam.

0

Podział kodu na kilka plików źródłowych

Jak dodać pliki które są w folderze tak żeby były dostępne w Source.cpp

#include <path_to_dir\header.h>
1

@YooSy trochę źle z tymi nawiasami. Raczej odwrotnie przyjęło się używać. Do własnych plików powinno się używać formy:

#include "file.h"

A do systemowych

#include <file.h>

https://stackoverflow.com/que[...]-quotes-while-including-heade

Poza tym to, czy dawać względną ścieżkę czy nie zależy od tego jakie IDE, czy mamy ustawione katalogi (oprócz katalogu głównego) w których kompilator szuka nagłówków.

0

Czyli #include "folder/header.h będzie najlepsze? :)

0

Moim zdaniem tak. Co ciekawe możesz w ten sposób dostawać się do folderów wyżej:

#include ".\..\..\project2\header.h"

Wyskoczy 2 katalogi nadrzędne. Korzystam z tego np jak chcę zainkludować plik *.h dla libki, a projekt lib'ki jest w katalogu równorzędnym do katalogu obecnego projektu.

1

Generalnie tak, mamy 2 typy dyrektywy #include: z nawiasem i cudzysłowem. Różnica jest taka, że wersja z nawiasem będzie preferować pliki znajdujące się w bierzącym katalogu, natomiast wersja z cudzysłowem będzie preferować inne lokacje (np. /usr/include w *nixach, można użyć flagi -I w gcc by takie miejsce zdefiniować). Zatem cudzysłowu używamy dla nagłówków prywatnych, a nawiasów dla nagłówków publicznych:

  • wtedy gdy używamy nagłówka zewnętrznej biblioteki
  • wtedy gdy używamy publicznego nagłówka biblioteki, którą właśnie piszemy (w bibliotekach zwykle publiczne nagłówki trzyma się osobno).

Prawdopodobnie w twoim przypadku należy użyć cudzysłowu ze ścieżką względną do bieżącego katalogu. I należy używać slashy (/), są bardziej przenośne. Wydaje mi się, że backslashe (\) zadziałają tylko na windzie, bo generalnie powinny być interpretowane jako znaki specjalne.

0

Faktycznie z tymi slashami masz rację @elwis. Sam używam slashy, bo i tak nie zależy mi na przenośności pomiędzy Windows -> Linux, więc mogę sobie pozwolić na stosowanie takiego zapisu.

0
elwis napisał(a):

Generalnie tak, mamy 2 typy dyrektywy #include: z nawiasem i cudzysłowem. Różnica jest taka, że wersja z nawiasem będzie preferować pliki znajdujące się w bierzącym katalogu, natomiast wersja z cudzysłowem będzie preferować inne lokacje (np. /usr/include w *nixach, można użyć flagi -I w gcc by takie miejsce zdefiniować).

@elwis: Nie na odwrót? Szczególnie, że zaraz piszesz:

Zatem cudzysłowu używamy dla nagłówków prywatnych, a nawiasów dla nagłówków publicznych:

  • wtedy gdy używamy nagłówka zewnętrznej biblioteki
  • wtedy gdy używamy publicznego nagłówka biblioteki, którą właśnie piszemy (w bibliotekach zwykle publiczne nagłówki trzyma się osobno).

?

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0