c++, překladač
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;
#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;
[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
ale ten zdroják jsem tu napsal
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 ...
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 ...
presne tak ako napisal Pabler s using-om :).
ak to nejde,tak napis co ti vypisala chybova konzola (cast) Visual Studia
ak to nejde,tak napis co ti vypisala chybova konzola (cast) Visual Studia
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)
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)
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.
[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
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
[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/
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/
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);
[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);
[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.
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.
[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.)
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.)
Dojigiri:
hezký, dáš sem to "plnotučný" makro? :-)
(asi to bude něco jako #IFDEF #DEFINE.... #ELSE #DEFINE), co?
hezký, dáš sem to "plnotučný" makro? :-)
(asi to bude něco jako #IFDEF #DEFINE.... #ELSE #DEFINE), co?
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
[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