Kezdőoldal » Számítástechnika » Programozás » Mi a különbség az #include és...

Mi a különbség az #include és az using namespace közt?

Figyelt kérdés
Hali. C#-ban amit namespacek közé rakunk azt máshol nem kell már definiálnunk, el tudjuk érni olyan scriptekből, ahol csak beleértjük azt a namespacet. De C++-ban ahogy észrevettem, van include is, meg using namespace is. Ha nem írom be hogy "using namespace std" akkor az #include <iostream> nem lesz jó, és ez fordítva is igaz. De akkor most mit csinál az egyik és mit csinál a másik? Bocsi, még nem használtam C++-t, csak C#-t, meg Java-t, meg dinamikus programnyelveket, és hiába keresem neten sehol nincs jól elmagyarázva.

2018. júl. 25. 14:51
 1/4 anonim ***** válasza:
84%

Az #include egy prepocesszor művelet, copy-paste-el egy header fájlt.

A using a linkernek mondja meg, hogy milyen névterekben keresse az explicit névtérdefiníció nélküli függvényeket.

2018. júl. 25. 16:10
Hasznos számodra ez a válasz?
 2/4 A kérdező kommentje:
ezt egy kicsit érthetőbben? miért nem működik az using nélkül az include?
2018. júl. 25. 16:41
 3/4 anonim ***** válasza:
52%

Ha includeolsz valamit, akkor a header file bemásolódik a abba a fileba. Mivel ebben definíciók vannak, így tudod használni a benne lévő elemeket.

Using kulcsszó nélkül is működik midnen, ami az iostreamben található. Feltételezem a cout-tal van gondod. Mivel ez az std névtérben van, ezért using nélkül csak úgy tudsz rá hivatkozni, hogy std::cout << "szoveg" << std::endl; Ha using-ot használod az std-re, akkor ezt elkerülheted, így elég a cout, stb. De javaslom, hogy inkább írd ki mindenhova az std::-ot, mint hogy usingolj egy hatalmas névteret, amiből alig kell neked valami.

2018. júl. 25. 18:46
Hasznos számodra ez a válasz?
 4/4 anonim ***** válasza:
70%

Az #include egy preprocesszor, ami semmi mást nem csinál, mint copy-paste bemásolja a megadott kódrészletet a forrásba. Pl #include <iostream> bemásolja az iostream alá tartozó kódállományt. Utána ha pl ki akarok valamit írni a konzolba, akkor már használhatom pl, hogy


std::cout<<"Hello World"<<std::endl;


Felhívnám a figyelmed az std:: részre. Ezzel jelölöm , hogy az std névtérben található amit használni akarok. Ha nem teszem ki, hogy std::, akkor fordító a lokális névtérben fogja keresni amit akarok. De a cout nem ott van, hanem az std-ben. Úgyhogy kapom a hibát fordításkor.


De mi van, ha én nem akarom a névtereket irogatni minden elé, mi van, ha én csak annyit akarok írni, hogy:

cout<<"Hello World"<<endl;


Na ekkor hasnálhatjuk a using namespace direktívát, ha megadom, hogy using namespace std, azzal az std névteret is hozzáadom az aktuális scope-hoz, így az std:: névtérjelölés nélkül is használhatom azt, ami az std-ben van.


Ez a különbség, az #include kódszinten elérhetővé tesz egy állományt, míg a using namespace segítségével pedig egy kódrészlet scope-jához tudunk hozzáadni egy névteret, elhagyhatóvá téve az explicit névtérmegjelölést.

2018. júl. 25. 20:00
Hasznos számodra ez a válasz?

Kapcsolódó kérdések:




Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!