reklama
Aktuality  |  Články  |  Recenze
Doporučení  |  Diskuze
Grafické karty a hry  |  Procesory
Storage a RAM
Monitory  |  Ostatní
Akumulátory, EV
Robotika, AI
Průzkum vesmíru
Digimanie  |  TV Freak  |  Svět mobilně

c++, překladač

Hlavinka (7)|14.1.2009 07:28
Mám problém, s překladačem. V dev-c++ mi to vytvori program, ale avg mi ho označí za vir(trojský kůň) a windows ho zablokuje a Microsoft visual c++ 2008 express mi to ani nevytvoří, protože tam mám nějaké chyby, i kdyz jsem si to zkontroloval podle mé knížky. Pro jistotu tady je zdroják:

#include

int main
{
cout << "blabla\n";
return 0;
}

ani tento program mi to nevytvorilo.


ted me napadlo, jestli tam nemá být:
using namespace std;
Drobcek9056 (115)|14.1.2009 07:34
napis tu zdrojak prosim,alebo daj ho niekde ako prilohu,nech sa pozriem na ten visual C++
Hlavinka (7)|14.1.2009 07:38
[QUOTE=Drobcek9056;206477]napis tu zdrojak prosim,alebo daj ho niekde ako prilohu,nech sa pozriem na ten visual C++[/QUOTE]

ale ten zdroják jsem tu napsal
Pabler (425)|14.1.2009 08:47
nedava ti prekladac daky warning ?
Bo ked neuvedies using namespace std, mal by si pisat std::cout ........


v tomto pripade by to malo by prelozitelne daj si tam ten namespace nech nemusis dopisovat po celom zdrojaku std::
aaa v tom visualku mas nacaty projekt ako konzolovu aplikaciu ?
bo myslim ze pri win form app ti cout asi nepojde ...
Drobcek9056 (115)|14.1.2009 10:13
presne tak ako napisal Pabler s using-om :).
ak to nejde,tak napis co ti vypisala chybova konzola (cast) Visual Studia
Dojigiri (1629)|14.1.2009 10:45
Několik možností:

1. using namespace std;

2. using std::cout;

3. std::cout << ...

4. #define cout std::cout

(ten poslední je nejvíc hardcore :D)

a mmch., chybí ti parametry main
nebo
int main(void)
Hlavinka (7)|14.1.2009 19:19
jo díky moc já jsem si to taky uvědomil, i když moc pozdě, ale mám ještě jeden problém, protože nemůžu spustit program, který jsem vytvořil. Dám build pak link, ale pak nemuzu najit run, nebo neco takoveho.
Hlavinka (7)|14.1.2009 19:26
[QUOTE=Dojigiri;206527]Několik možností:

1. using namespace std;

2. using std::cout;

3. std::cout << ...

4. #define cout std::cout

(ten poslední je nejvíc hardcore :D)

a mmch., chybí ti parametry main
nebo
int main(void)[/QUOTE]

já se to učím teprve a mě učí, že void se může vynechat
mstejska (2912)|14.1.2009 19:54
Hnusne, prasacke, 30 let stara C konvence.
Kdo te tohle prosim te uci?
Hlavinka (7)|14.1.2009 20:12
knizka mistrovstvi v c++(darek k narozkam..)
Hlavinka (7)|14.1.2009 20:19
ale pls jak to spustit?
Pabler (425)|14.1.2009 20:21
Vo visual C++ klik
F5 - Spustí spolu s Debug :)
Ctrl+F5 - len spustí PRG bez debuggu
Dojigiri (1629)|15.1.2009 11:27
[QUOTE=Hlavinka;206717]já se to učím teprve a mě učí, že void se může vynechat[/QUOTE]

void se může vynechat (překladače to schroupnou), a v metodách bez parametrů se obvykle vynechává (protože kdo by se s tim furt dokola psal), ale minimálně bys tam měl mít ty závorky
main( )

a u main je úplně správně napsat hlavičku
int main(int argc, char ** argv)
(nebo ekvivalentní druhýmu parametru: char argv[][], char * argv[])

ale většina překladačů schroupne i "int main()", některý dokonce i "void main()" (např. MSVC) - ale není to standardní zápis, úplně správně je napsat tu správnou hlavičku (to je zápis pro portabilitu programu na všechny překladače a systémy).

main je totiž tzv. "entry point" (na windows můžou být ještě alternativy wmain pro unicode, WinMain pro ne-konzolový aplikace) a funguje to tak, že překladač hledá funkci s jakoukoliv signaturou, kterou podporuje jako entry point, a když jí nalezne, tak to slinkuje a při zavedení programu zavolá dotyčnej entrypoint, kterej nalezl (takže různý překladače můžou podporovat několik různých signatur - "rozšíření" základní syntaxe - ale standardní "int main( int argc, ....." by měly podporovat všechny překladače).


Jinak pro C++ doporučuju ke studiu poměrně pěknou sajtu:
http://www.parashift.com/c++-faq-lite/
Hlavinka (7)|15.1.2009 16:32
aha, já tam píšu ty závorky jenom jsem je tady nenapsal v te rychlosti....
Logout (4018)|15.1.2009 17:23
mtejska:
[quote]
Hnusne, prasacke, 30 let stara C konvence.
Kdo te tohle prosim te uci?
[/quote]

Jak už píše dojigri, motáš spíš Ty :-). Dals dohromady dvě věci
1) syntaxe C, kde se mohou vynechat parametry metody. Todle se už asi 30 let nepoužívá, ale hlavně je to záležitost C, nikoli C++.
2) Vynechání slovíčka void v definici fce bez parametrů. To je naopak záležitost C++
(umožněná zákazem bodu 1 :-)) a naprosto legální a IMHO i doporučovaná, anžto je
přehlednější a jednodušší při psaní

Hlavinka:
void sice můžeš vynechat, ale závorky samozřejmě nikoli, takže máš tři možnosti:

int main()
int main(void)
int main(int argc,char** argv);
mstejska (2912)|15.1.2009 19:17
[QUOTE=Logout;207070]mtejska:


Jak už píše dojigri, motáš spíš Ty :-). Dals dohromady dvě věci
1) syntaxe C, kde se mohou vynechat parametry metody. Todle se už asi 30 let nepoužívá, ale hlavně je to záležitost C, nikoli C++.
2) Vynechání slovíčka void v definici fce bez parametrů. To je naopak záležitost C++
(umožněná zákazem bodu 1 :-)) a naprosto legální a IMHO i doporučovaná, anžto je
přehlednější a jednodušší při psaní

Hlavinka:
void sice můžeš vynechat, ale závorky samozřejmě nikoli, takže máš tři možnosti:

int main()
int main(void)
int main(int argc,char** argv);[/QUOTE]

"Hnusne" je pro me pripad 2, s ukazkou 1 a 3 samozrejme souhlasim.
Z bodem 1) take souhlasim, myslel jsem prave tento. Timto se omlouvam a sypu si popel na hlavu.:mistake
Jako hnusne je tohle
int main(int,char**) to jsem mel na mysli.
Logout (4018)|15.1.2009 20:45
A co teprv:
[code]
main(argc,char **)
{}
[/code]
to je taky zcela legální....fuj!
Dojigiri (1629)|16.1.2009 11:53
[QUOTE=mstejska;207099]Jako hnusne je tohle
int main(int,char**) to jsem mel na mysli.[/QUOTE]

Njn. ale určitej důvod pro takovej zápis by byl, pokud argc a argv v main vůbec nepoužiju, abych se vyhnul warningům "unused parameter" a zároveň bych chtěl zachovat "nejvíc kompatibilní hlavičku" (ale main(void) jde povětšinou taky použít). I když tenhle případ (i v jiných metodách, např. při implementaci virtuální metody, která parametr musí mít určitej parametr, ale ten neni zrovna uvnitř aktuální implementace použit) řeším obvykle makrem typu
#define UNUSED(param)
...
function(const int UNUSED(iParam))

(kdy makro UNUSED neni zpravidla tak jednoduchý a expanduje na function(const int ) v norm. případě a na function(const int iParam) např. pro generování dokumentace přes Doxygen apod.)
Logout (4018)|16.1.2009 12:31
Dojigiri:
hezký, dáš sem to "plnotučný" makro? :-)
(asi to bude něco jako #IFDEF #DEFINE.... #ELSE #DEFINE), co?
Dojigiri (1629)|16.1.2009 13:07
jojo, je to vcelku jednoduchý

[CODE]#ifdef DOXYGEN
#define UNUSED_PARAMETER( parameter ) parameter
#else
#define UNUSED_PARAMETER( parameter )
#endif
[/CODE]

pro Doxygen je definovanej symboj DOXYGEN a jinak není. To mám některý mnohem složitější makra :D
Logout (4018)|16.1.2009 13:19
Jojo, ono to je vcelku jasný :-) jen sem si říkal, že když už o tom mluvíme, tak to třeba někomu pomůže, když to tu uvidí :-)
grafnev (69)|26.1.2009 11:30
Ansi C na Vas :). V tom mi kdysi trval hello world asi hodinu, nez me to pustilo bez warningu :).