Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Header fajl bez include-a, ali mora namespace, zašto?!

[es] :: C/C++ programiranje :: C/C++ za početnike :: Header fajl bez include-a, ali mora namespace, zašto?!

[ Pregleda: 2113 | Odgovora: 11 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

azzpoz

Član broj: 300637
Poruke: 96



+1 Profil

icon Header fajl bez include-a, ali mora namespace, zašto?!18.12.2012. u 19:32 - pre 137 meseci
Interesuje me:
#include <iostream>
#include <iomanip>
#include "Hedfajl.h"

int main(){ funkcija();
return 0;}

// Headfajl.h
// zašto radi bez #include <iostream> i <iomanip>, i zašto moram navoditi using namespace i u Hedfajl.h
using namespace std;
void funkcija(){ cout<< setw(11)<<"hello ES"; }
 
Odgovor na temu

Burgos
Nemanja Borić
Amazon Web Services
Berlin

Član broj: 12484
Poruke: 1947
212.178.230.*

Sajt: stackoverflow.com/users/1..


+480 Profil

icon Re: Header fajl bez include-a, ali mora namespace, zašto?!18.12.2012. u 20:01 - pre 137 meseci
Ne moraš navoditi using namespace std; unutar header fajla ukoliko ga u cpp fajlu deklarišeš pre uvoženja h fajla:

Code:

#include <iostream>
#include <iomanip>
using namespace std;
#include "Hedfajl.h"


int main(){ funkcija();
return 0;} 


Dakle, umesto #include namespace std; predprocesor će ubaciti sadržaj hedfajl.h i using će važiti i unutar te funkcije.

C:\Users\Burgos\Desktop\test>cl main.cpp /EHsc
Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 15.00.21022.08 for 80x86
Copyright (C) Microsoft Corporation. All rights reserved.

main.cpp
Microsoft (R) Incremental Linker Version 9.00.21022.08
Copyright (C) Microsoft Corporation. All rights reserved.

/out:main.exe
main.obj

C:\Users\Burgos\Desktop\test>main
hello ES
 
Odgovor na temu

azzpoz

Član broj: 300637
Poruke: 96



+1 Profil

icon Re: Header fajl bez include-a, ali mora namespace, zašto?!18.12.2012. u 20:38 - pre 137 meseci
Da li to znaci da bilo koja #include <biblioteka> i using namespace std; naveden prije poziva funkcije vrijede u svim funkcijama koje slijede?
 
Odgovor na temu

Burgos
Nemanja Borić
Amazon Web Services
Berlin

Član broj: 12484
Poruke: 1947
212.178.230.*

Sajt: stackoverflow.com/users/1..


+480 Profil

icon Re: Header fajl bez include-a, ali mora namespace, zašto?!18.12.2012. u 20:57 - pre 137 meseci
Preciznije, using važi u tekućem bloku. A #include se slepo zamenjuje, pa šta bude - zato se i radi da se u nekoj budućnosti ovo ukloni (uvođenjem modula). Ako staviš na vrh fajla, kao sada, "važe" u svim funkcijama.
 
Odgovor na temu

Nedeljko
Nedeljko Stefanović

Član broj: 314
Poruke: 8632
*.3gnet.mts.telekom.rs.



+2789 Profil

icon Re: Header fajl bez include-a, ali mora namespace, zašto?!18.12.2012. u 22:03 - pre 137 meseci
Citat:
Burgos: Ne moraš navoditi using namespace std; unutar header fajla ukoliko ga u cpp fajlu deklarišeš pre uvoženja h fajla:

Ovo je vrlo loša praksa. Svaki fajl treba da brine sam o sebi, a ne da ima pretpostavke o tome kako će biti korišćen. Stavljanje "using namespace" u zaglavlja je loša praksa jer ne znaš odakle sve može biti uvezen i sa čim, te da li će nešto sa nečim da se kosi, pa stoga nemoj da te mrzi da kucaš std::ifstream u zaglavlju. U cpp stavljaj slobodno "using namespace" jer je tu kontekst potpuno određen. Njega niko drugi ne učitava, a on sam zna šta učitava itd. Ako baš zasmeta neki "using namespace" u cpp fajlu, lako će se ukloniti u jenom fajlu umesto u celomk projektu.
Nije bitno koji su zaključci izvučeni, već kako se do njih došlo.
 
Odgovor na temu

Burgos
Nemanja Borić
Amazon Web Services
Berlin

Član broj: 12484
Poruke: 1947
212.178.230.*

Sajt: stackoverflow.com/users/1..


+480 Profil

icon Re: Header fajl bez include-a, ali mora namespace, zašto?!19.12.2012. u 11:55 - pre 137 meseci
A pošto sam rekao da using ima oblast važenja tekućeg bloka, najbolje rešenje je da uvoziš imenski prostor samo tamo gde je potreban.


Code:

void func(){
   using namespace std;
   cout << "Hello" << endl;
}
 
Odgovor na temu

Nedeljko
Nedeljko Stefanović

Član broj: 314
Poruke: 8632
*.3gnet.mts.telekom.rs.



+2789 Profil

icon Re: Header fajl bez include-a, ali mora namespace, zašto?!19.12.2012. u 13:39 - pre 137 meseci
Tako ćeš iamti nepotrebno mnogo takvih linija. Dovoljno je na početku cpp fajla (uobičajeno posle include-ova) staviti using namespace i gotovo.
Nije bitno koji su zaključci izvučeni, već kako se do njih došlo.
 
Odgovor na temu

Mihajlo Cvetanović
Beograd

Moderator
Član broj: 37636
Poruke: 1249



+96 Profil

icon Re: Header fajl bez include-a, ali mora namespace, zašto?!19.12.2012. u 13:54 - pre 137 meseci
Za mene postoje dve prihvatljive opcije. Prva je using namespace na početku fajla, a druga je eksplicitno stavljanje prefiksa kod svake upotrebe (std::bilo_šta). U velikim projektima savetuje se ovo drugo, jer zaista nije neki problem malo više slova, a dobija se na čitljivosti. Evo pitanja na StackOverflow: http://stackoverflow.com/q/1452721/395718

Opcije koje meni nisu prihvatljive su using namespace u heder fajlu (jer to je zaista loša upotreba), i using namespace u svakoj funkciji ponaosob (jer je cimanje, iako je preporučljivije od using namespace na početku fajla).

Pored using deklaracije (using namespace std) postoji i using direktiva (using std::bilo_šta), gde čovek ima bolju kontrolu nad time šta zaista koristi, ali i to mi je cimanje u istoj ravni sa using deklaracijom u svakoj funkciji.
 
Odgovor na temu

Burgos
Nemanja Borić
Amazon Web Services
Berlin

Član broj: 12484
Poruke: 1947
212.178.230.*

Sajt: stackoverflow.com/users/1..


+480 Profil

icon Re: Header fajl bez include-a, ali mora namespace, zašto?!19.12.2012. u 14:20 - pre 137 meseci
@Nedeljko

a šta da radiš kada moraš da navodiš definicije funkcija u h fajlu (generičke funkcije)?

Lično umesto ovoga

Code:
void f()
{
    // i jos pet puta
    pcl::common::fja();
}


dosta mi je čitljivije

Code:
void f()
{
    using pcl::common;

    // i još pet puta
    fja();
}
 
Odgovor na temu

Nedeljko
Nedeljko Stefanović

Član broj: 314
Poruke: 8632
*.3gnet.mts.telekom.rs.



+2789 Profil

icon Re: Header fajl bez include-a, ali mora namespace, zašto?!19.12.2012. u 19:17 - pre 137 meseci
U zaglavljima jednostavno pišem prefikse i to ne može da bude okosnica ni programa, ni profitabilnosti projekta (što je programer utrošio malo više vremena na kuckanje prefiksa). U cpp fajlovima na početku uključim šta treba (posle uključivanja zaglavlja), a ako jenog dana baš zapne da se takav cpp fajl kosi sa nečim (za šta je mala verovatnoća), onda problematični using izbacim i dodam prefikse u tom jednom cpp fajlu.
Nije bitno koji su zaključci izvučeni, već kako se do njih došlo.
 
Odgovor na temu

Burgos
Nemanja Borić
Amazon Web Services
Berlin

Član broj: 12484
Poruke: 1947
212.178.230.*

Sajt: stackoverflow.com/users/1..


+480 Profil

icon Re: Header fajl bez include-a, ali mora namespace, zašto?!19.12.2012. u 19:45 - pre 137 meseci
Nedeljko, ja se apsolutno slažem sa tobom, nisam rekao da je to bilo kakva okosnica; Samo kažem da mi je lakše kada pišem "nepotrebno mnogo takvih linija", u odnosu na sličan broj prefiksa; ali to je već lična stvar, stvar kompanije, ili postojećeg koda koji održavaš.

I da se naknadno ogradim - nisam ja preporučio pokretaču teme da na onakav način uključuje imenske prostore, mislio sam da čovek pita infromativno.
 
Odgovor na temu

azzpoz

Član broj: 300637
Poruke: 96



+1 Profil

icon Re: Header fajl bez include-a, ali mora namespace, zašto?!19.12.2012. u 21:42 - pre 137 meseci
Isključivo informativno je pitanje bilo, jer mi je to bila zagonetka dok nisam dobio rješenje na forumu.
 
Odgovor na temu

[es] :: C/C++ programiranje :: C/C++ za početnike :: Header fajl bez include-a, ali mora namespace, zašto?!

[ Pregleda: 2113 | Odgovora: 11 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.