Include_next!

Może mi ktoś powiedzieć do czego służy ta dyrektywa: #include_next .

Jak wywołać tą bibliotekę ?

Przeczytaj ten wątek:

http://forum.dobreprogramy.pl/viewtopic.php?t=152275

Nikt tutaj nie jest wróżką.

#include_next działa jak #include z tym że załącza plik nagłówkowy nie z pierwszego napotkanego katalogu, a z drugiego. Przeważnie - implementacja w GCC2 ma błędy.

Ok, prostuje pytanie…

Wiadomo, że po dyrektywie #include są biblioteki, np: stdio.h.

Po kompilacji programu wyskakuje mi błąd, że nieposiadam takiej biblioteki, #include_next < stdio >. Gdzie mam umieścić tę bibliotekę? W forderze include czy stworzyć nowy -include_next?

W pierwszej kolejności odpowiedz sobie na pytanie: co co Ci include_next i czy Twój kompilator obsługuje include_next. Jeśli kompilator obsługuje include_next to działanie jest niesamowicie proste:

Każdy kompilator ma kilka katalogów z których pobiera pliki nagłówkowe. Nie można pobrać wszystkich jednocześnie, więc sprawdzane są katalogi w pewnej kolejności i pierwszy napotkany, pasujący plik nagłówkowy zostaje użyty. Używając include_next załączysz drugi napotkany plik nagłówkowy.

Załóżmy, że pracujesz w Linuksie (najwyraźniej wzbraniasz się przed lekturą podanego wątku i chcesz mi zapewnić zabawę w zgadywanie co i jak robisz) i kolejność katalogów, z których pobierane są pliki nagłówkowe to:

/usr/include

/usr/local/include

./

Jeśli w każdym z nich istnieje plik blah.h, include załączy ten z /usr/include, include_next ten z /usr/local/include. Nie ma w tym mechaniźmie niczego skomplikowanego.

Poza tym - include (dołączenie do programu pliku nagłówkowego) nie jest równoznaczne z załączeniem biblioteki. Plik nagłówkowy informuje jakie funkcje i klasy można importować z biblioteki (definiuje prototypy). Sama biblioteka dołączana jest w czasie linkowania i nie ma na nią wpływu include czy include_next - linkowanie jest specyficzne platformie i kompilatorowi. Jak działa u Ciebie - nie wiem, bo się nie chcesz podzielić tak tajną informacją jak to z jakiego kompilatora korzystasz i pod jakim systemem.

Więc jeszcze raz:

http://forum.dobreprogramy.pl/viewtopic.php?t=152275

Odpowiedz na postawione tam pytania i napisz jaki jest problem a nie sugeruj jak chcesz go rozwiązać. “Gdzie mam skopiować pliki?” jest źle postawionym pytaniem, bo prawdopodobnie problem nie jest w umiejscowieniu czegoś gdzieś, a w kodzie. Nie pytaj o to jak zaimplementować swoje (prawdopodobnie błędne) rozwiązanie tylko postaw podstawowy problem.

Dobra to zacznę od poczatku:

-system Xp

-praca na borlandzie 6 (stary ale sie przyzwyczaiłem)

-biblioteka powiekszona do około 250MB

Część kodu zamieszczam poniżej:

/* .............................................*/

               #include 

                   #include 

                   #include 

                   #include 

                   #include 

                   #include 

                   #include 

                   #include 

                   #include 

                   #include 

                       #define SCAN

                       #undef LARGE_NET

                       #undef FREEBSD

                       #define BROADCAST 2


                  enum (TCP_PENDING = 1, TCP_CONNECTED = 2 itd.....

…oczywiście dalej jest więcej…ale nie o to chodzi. I teraz przy kompilacji wychodzi tak:

#ifndef _HACKED_UNISTD_INCLUDED

        #define _HACKED_UNISTD_INCLUDED


        [color=red]#include_next [/color] [i]tutaj jest błąd[/i]


        #ifdef _POSIX_JOB_CONTROL

        #undef _POSIX_JOB_CONTROL

        #define _POSIX_JOB_CONTROL 1

        #endif

na dole zaś kompilator podpowiada, że…

[C++Error]unistd.h(4):E2048 Unknown preprocessor directive:'include_next'

Problem dotyczy nie tylko tego kodu ale i innych-zmieniają się tylko nazwy bibliotek. Tutaj dotyczy ale mam jeszcze z

Odpowiedź w takim razie masz w jednym z poprzednich maili - kompilator nie obsługuje dyrektywy include_next. Jest to wyraźnie zaznaczone w komunikacie błędu: “preprocessor directive” to dyrektywa kompilatora zaczynająca się od # (include, pragma, ifndef, itd.).

Co więcej, miałeś nieco wcześniej napisane, że include_next jest w gruncie rzeczy specyficzne dla GCC 2.

Czyli w telegraficznym skrócie - nie wiem skąd masz te pliki nagłówkowe, ale z Twoim kompilatorem współpracowały nie będą. Możesz próbować to naprawić zmieniając include_next na include i starając sie czasem dopisać odpowiedni podkatalog przed nazwą pliku nagłówkowego (np. #include_next może się zamienić w #include lub #include ).