[ azzpoz @ 18.12.2012. 19:32 ] @
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"; }
[ Burgos @ 18.12.2012. 20:01 ] @
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
[ azzpoz @ 18.12.2012. 20:38 ] @
Da li to znaci da bilo koja #include <biblioteka> i using namespace std; naveden prije poziva funkcije vrijede u svim funkcijama koje slijede?
[ Burgos @ 18.12.2012. 20:57 ] @
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.
[ Nedeljko @ 18.12.2012. 22:03 ] @
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.
[ Burgos @ 19.12.2012. 11:55 ] @
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;
}
[ Nedeljko @ 19.12.2012. 13:39 ] @
Tako ćeš iamti nepotrebno mnogo takvih linija. Dovoljno je na početku cpp fajla (uobičajeno posle include-ova) staviti using namespace i gotovo.
[ Mihajlo Cvetanović @ 19.12.2012. 13:54 ] @
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.
[ Burgos @ 19.12.2012. 14:20 ] @
@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();
}
[ Nedeljko @ 19.12.2012. 19:17 ] @
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.
[ Burgos @ 19.12.2012. 19:45 ] @
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.
[ azzpoz @ 19.12.2012. 21:42 ] @
Isključivo informativno je pitanje bilo, jer mi je to bila zagonetka dok nisam dobio rješenje na forumu.